最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#_SqlDependency的使用詳解

 更新時間:2023年06月19日 15:03:03   作者:自定義的星空  
SqlDependency對象表示應用程序和 SQL Server 實例間的查詢通知依賴關系,這篇文章主要介紹了C#_SqlDependency的使用,需要的朋友可以參考下

C#_SqlDependency的使用

SqlDependency允許你在數(shù)據(jù)庫中的原始數(shù)據(jù)更改時接收通知,要接收通知,您需要訂閱OnChange事件。

SqlDependency有如下限制:

  • SELECT語句中的投影列必須明確聲明,并且表名必須由兩部分組成。請注意,這意味著該語句中引用的所有表必須位于同一數(shù)據(jù)庫中。
  • 該語句不能使用星號(*)或table_name。*語法指定列。
  • 該語句不能使用未命名的列或重復的列名。
  • 該語句必須引用基表。
  • 該語句不能引用具有計算列的表。
  • 除非該語句使用GROUP BY表達式,否則SELECT語句中的投影列可能不包含聚合表達式。提供GROUP BY表達式時,選擇列表可能包含聚合函數(shù)COUNT_BIG()或SUM()。但是,不能為可為空的列指定SUM()。該語句可能未指定HAVING,CUBE或ROLLUP。
  • SELECT語句中用作簡單表達式的投影列不得出現(xiàn)多次。
  • 該聲明不能包含PIVOT或UNPIVOT運算符。
  • 該語句不能包含UNION,INTERSECT或EXCEPT運算符。
  • 該語句不能引用視圖。
  • 該語句不得包含以下任何內(nèi)容:DISTINCT,COMPUTE或COMPUTE BY或INTO。
  • 該語句不能引用服務器全局變量(@@ variable_name)。
  • 該語句不能引用派生表,臨時表或表變量。
  • 該語句不得引用其他數(shù)據(jù)庫或服務器中的表或視圖。
  • 該語句不能包含子查詢,外部聯(lián)接或自我聯(lián)接。
  • 該語句不能引用大型對象類型:text,ntext和image。
  • 該語句不得使用CONTAINS或FREETEXT全文謂詞。
  • 該語句不得使用行集函數(shù),包括OPENROWSET和OPENQUERY。
  • 該語句不得使用以下任何聚合函數(shù):AVG,COUNT(*),MAX,MIN,STDEV,STDEVP,VAR或VARP。
  • 該語句不得使用任何不確定的函數(shù),包括排名和窗口函數(shù)。
  • 該語句不能包含用戶定義的聚合。
  • 該語句不得引用系統(tǒng)表或視圖,包括目錄視圖和動態(tài)管理視圖。
  • 該語句不能包含F(xiàn)OR BROWSE信息。
  • 該語句不能引用隊列。
  • 該語句不能包含不能更改且不能返回結果的條件語句(例如,WHERE 1 = 0)。
  • 該語句不能指定READPAST鎖定提示。
  • 該語句不能引用任何Service Broker QUEUE。
  • 該語句不能引用同義詞。
  • 該語句不能具有基于double / real數(shù)據(jù)類型的比較或表達式。
  • 該語句不能使用TOP表達式。

在使用SqlDependency之前,首先需要啟用數(shù)據(jù)庫的服務器代理,默認情況下,SQL Server數(shù)據(jù)庫沒有啟用Service Broker。你可以使用SQL語句啟用Service Broker。

ALTER DATABASE DATABASE_NAME SET ENABLE_BROKER

下面是使用SqlDependency的簡單示例:

static string connectionString = @"your connect string";
        static void Main(string[] args)
        {
            SqlDependency.Start(connectionString);
            getDataWithSqlDependency();
            Console.WriteLine("Waiting for data changes");
            Console.WriteLine("Press enter to quit");
            Console.ReadLine();
            SqlDependency.Stop(connectionString);
        }
        static DataTable getDataWithSqlDependency()
        {
            using (var connection = new SqlConnection(connectionString))
            using (var cmd = new SqlCommand("SELECT productname FROM dbo.product;", connection))
            {
                var dt = new DataTable();
                var dependency = new SqlDependency(cmd);
                dependency.OnChange += new OnChangeEventHandler(onDependencyChange);
                connection.Open();
                dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
                return dt;
            }
        }
        static void onDependencyChange(object sender,SqlNotificationEventArgs e)
        {
            Console.WriteLine($"OnChange Event fired. SqlNotificationEventArgs: Info={e.Info}, Source={e.Source}, Type={e.Type}.");
            if ((e.Info != SqlNotificationInfo.Invalid)
                && (e.Type != SqlNotificationType.Subscribe))
            {
                var dt = getDataWithSqlDependency();
                Console.WriteLine($"Data changed. {dt.Rows.Count} rows returned.");
            }
            else
            {
                Console.WriteLine("SqlDependency not restarted");
            }
            Console.ReadLine();
        }

參考資料:

https://stackoverflow.com/questions/7588572/what-are-the-limitations-of-sqldependency

https://www.c-sharpcorner.com/UploadFile/87b416/working-with-sql-notification/

C#使用SqlDependency實現(xiàn)數(shù)據(jù)緩存

1、SqlDependency是什么:

SqlDependency對象表示應用程序和 SQL Server 實例間的查詢通知依賴關系。應用程序可以創(chuàng)建一個SqlDependency對象并進行注冊以通過OnChangeEventHandler事件處理程序接收通知。

它提供了這樣一種能力:當被監(jiān)測的數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生變化時,SqlDependency會自動觸發(fā)OnChange事件來通知應用程序,從而達到讓系統(tǒng)自動更新數(shù)據(jù)(或緩存)的目的。

應用:數(shù)據(jù)實時性較高的場景、新聞、監(jiān)控數(shù)據(jù)等。

可以結合SignalR來實現(xiàn)web的實時數(shù)據(jù)更新。

2、使用方法:

1)sql server設置:ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;語句讓相應的數(shù)據(jù)庫啟用監(jiān)聽服務,以便支持SqlDependency特性。

2)代碼:控制臺項目,web項目推薦把start放在Application_start方法中。

3)注意:查詢語句中不能使用*,表名要加[dbo].[xx]。sql語句要執(zhí)行。

conn =ConfigurationManager.ConnectionStrings["default"].ToString();
                //Start和Stop方法
                SqlDependency.Start(conn);
                Update(conn);
 private static void Update(string conn)
        {
            using (
                   SqlConnection connection =
                       new SqlConnection(conn))
            {
                //此處 要注意 不能使用*  表名要加[dbo]  否則會出現(xiàn)一直調(diào)用執(zhí)行 OnChange
                string sql = "select agent from [dbo].[info]";
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    connection.Open();
                    command.CommandType=CommandType.Text;
                    dependency = new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                    //必須要執(zhí)行一下command
                    command.ExecuteNonQuery();
                    Console.WriteLine(dependency.HasChanges);
                }
            }
        }
        //update insert delete都會進入
        private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            Console.WriteLine("onchange方法中:"+dependency.HasChanges);
            Console.WriteLine("數(shù)據(jù)庫數(shù)據(jù)發(fā)生變化"+DateTime.Now);
            //這里要再次調(diào)用
            Update(conn);
        }

到此這篇關于C#_SqlDependency的使用的文章就介紹到這了,更多相關C# SqlDependency使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#排序算法之歸并排序

    C#排序算法之歸并排序

    這篇文章主要為大家詳細介紹了C#排序算法之歸并排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C#實現(xiàn).net頁面之間傳值傳參方法匯總

    C#實現(xiàn).net頁面之間傳值傳參方法匯總

    這篇文章主要介紹了C#實現(xiàn).net頁面之間傳值傳參方法,實例匯總了幾類常見的傳值傳參的方法,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C#利用iTextSharp組件給PDF文檔添加圖片/文字水印

    C#利用iTextSharp組件給PDF文檔添加圖片/文字水印

    這篇文章主要給大家介紹了關于如何C#利用iTextSharp組件給PDF文檔添加圖片/文字水印的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • C#調(diào)用攝像頭實現(xiàn)拍照功能的示例代碼

    C#調(diào)用攝像頭實現(xiàn)拍照功能的示例代碼

    這篇文章主要介紹了C#調(diào)用攝像頭實現(xiàn)拍照功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • C#反射調(diào)用dll文件中的方法操作泛型與屬性字段

    C#反射調(diào)用dll文件中的方法操作泛型與屬性字段

    這篇文章介紹了C#反射調(diào)用dll文件中的方法操作泛型與屬性字段,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 詳解C#如何實現(xiàn)一個事件總線

    詳解C#如何實現(xiàn)一個事件總線

    Event Bus(事件總線)是一種用于在應用程序內(nèi)部或跨應用程序組件之間進行事件通信的機制,它允許不同的組件通過發(fā)布和訂閱事件來進行解耦和通信,本文給大家介紹了C# 如何實現(xiàn)一個事件總線,需要的朋友可以參考下
    2024-10-10
  • Winform項目中TextBox控件DataBindings屬性

    Winform項目中TextBox控件DataBindings屬性

    這篇文章介紹了Winform項目中TextBox控件DataBindings屬性的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#虛函數(shù)用法實例分析

    C#虛函數(shù)用法實例分析

    這篇文章主要介紹了C#虛函數(shù)用法,實例分析了C#中虛函數(shù)的功能與基本使用技巧,需要的朋友可以參考下
    2015-07-07
  • C#判斷字符串是否存在字母及字符串中字符的替換實例

    C#判斷字符串是否存在字母及字符串中字符的替換實例

    這篇文章主要介紹了C#判斷字符串是否存在字母及字符串中字符的替換,實例形式講述了C#針對字符串的正則操作,需要的朋友可以參考下
    2014-10-10
  • C#發(fā)送和接收HTTP請求類HttpWebRequest的用法

    C#發(fā)送和接收HTTP請求類HttpWebRequest的用法

    這篇文章主要給大家介紹了關于C#發(fā)送和接收HTTP請求類HttpWebRequest用法的相關資料,C#中的HttpWebRequest是一個用于發(fā)送HTTP請求的類,它可以用于向Web服務器發(fā)送GET、POST、PUT、DELETE等請求,需要的朋友可以參考下
    2024-06-06

最新評論

利津县| 雅安市| 灵璧县| 辰溪县| 湄潭县| 贺兰县| 察哈| 塔城市| 叶城县| 塘沽区| 莱西市| 和平区| 贵溪市| 湛江市| 建平县| 绥江县| 沈阳市| 兴宁市| 迁西县| 兖州市| 工布江达县| 汝南县| 留坝县| 崇义县| 吉首市| 南漳县| 沁水县| 西盟| 隆林| 山西省| 讷河市| 商南县| 苍溪县| 定远县| 通渭县| 罗山县| 常山县| 琼海市| 留坝县| 东光县| 县级市|