我想我的Windows服務(用.NET編寫)識別何時將新行添加到特定的表中,而不是從sql服務器中提取數據,我想使用服務器推送模式。有沒有像Sql Server Tables的FileSystemWatcher?
有人對我有一個提示如何實現這一目標? 我使用SQL Server 2005的
TIA
我想我的Windows服務(用.NET編寫)識別何時將新行添加到特定的表中,而不是從sql服務器中提取數據,我想使用服務器推送模式。有沒有像Sql Server Tables的FileSystemWatcher?
有人對我有一個提示如何實現這一目標? 我使用SQL Server 2005的
TIA
還有,如果你正在使用的客戶端ADO.NET使用C#或VB.NET
一個的SqlDependency對象可以是在一個SqlCommand相關 的ADO.NET SqlDependency機制訂購 來檢測查詢結果與最初檢索結果不同的 。您 也可以爲代理分配 OnChange事件,當 命令的結果更改 時將觸發此事件。您必須將 SqlDependency與執行該命令的 之前的命令相關聯。 SqlDependency的HasChanges屬性也可用於 確定查詢結果是否自 檢索到數據後 已更改。
你基本上關聯與你的SqlCommand一個SqlDependency
,並提供事件處理程序被調用時,值組成結果集的SqlDependency變化。
using(SqlCommand cmd = new SqlCommand(queryStatement, _conn))
{
cmd.Notification = null;
SqlDependency dependency = new SqlDependency(cmd);
dependency.OnChange +=
new OnChangeEventHandler(OnChange);
......
}
在事件處理程序中,你可以做任何你需要做的事情。
void OnChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dependency = sender as SqlDependency;
(do whatever you need to do - e.g. reload the data)
}
馬克
你會在SQL Server 2005中得到的最接近的是一個觸發。 Sql Server 2008也有更改數據捕獲。
鑑於Notification Services在2008版本中再次迅速下降,我不會推薦基於此的新解決方案。 在發佈marc_s時,可以從託管代碼中使用SqlDependency/SqlNotificationRequest類。 – 2009-08-21 13:32:00
我不知道它掉了。這並不像我在幾年內觸及過它。但是,OP明確指出他正在使用SQL Server 2005,所以它不會成爲問題。這就是說,你對marc_s的想法是一個更好的想法是正確的。不與外部服務分享責任似乎更好。 – 2009-08-21 14:18:27
你可以使用從數據庫中webservice call觸發。但我不知道如何對數據庫造成不利影響(如果有的話)。
要小心使用SqlDependency類監視數據庫表中的更改 - 它有problems與內存泄漏。但是,您可以使用DDL觸發器和SQL Service Broker API自己的實現或使用開源項目之一,例如SqlDependencyEx:
int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME))
{
sqlDependency.TableChanged += (o, e) => changesReceived++;
sqlDependency.Start();
// Make table changes.
MakeTableInsertDeleteChanges(changesCount);
// Wait a little bit to receive all changes.
Thread.Sleep(1000);
}
Assert.AreEqual(changesCount, changesReceived);
希望這會有所幫助。
這是一個很好的解決方案,可能是您的情況最好,但是,我很確定「服務器」(SQL服務器)不是「推」任何東西......我很好奇,但是,什麼* *是否正在進行? – 2009-08-21 14:35:21
@Mike:服務器**是**推送。看到這裏:http://rusanu.com/2006/06/17/the-mysterious-notification/ – 2009-08-21 14:55:29
@Marc:實際上查詢通知也可用於ODBC和OleDB客戶端:http://msdn.microsoft.com/zh-cn/ -us/library/ms130764.aspx – 2009-08-21 15:02:34