考慮這個例子:檢測SQL數據庫改變
INSERT INTO [Table] (column1)
SELECT value1
如果我執行在SSMS此命令,在關於一個C#窗體應用程序,你會我需要爲了認識這個事件呢?事件發生時,應用程序顯示一個MessageBox
。我似乎無法解決這個問題或找到有用的數據。我試圖使用SqlDependency
但我沒有任何運氣。如果那是我需要走下去的道路,任何人都可以幫助我理解這個概念,讓它更好一點?
考慮這個例子:檢測SQL數據庫改變
INSERT INTO [Table] (column1)
SELECT value1
如果我執行在SSMS此命令,在關於一個C#窗體應用程序,你會我需要爲了認識這個事件呢?事件發生時,應用程序顯示一個MessageBox
。我似乎無法解決這個問題或找到有用的數據。我試圖使用SqlDependency
但我沒有任何運氣。如果那是我需要走下去的道路,任何人都可以幫助我理解這個概念,讓它更好一點?
如果你想檢測變化,而不是隻是插入,你可以使用SQL Dependency來實現這一點。你有沒有閱讀並嘗試鏈接中的例子?
Heres a nice 'tutorial/example' that works and runs you through the basics。
Heres a nice overview of Query Notifications.
低級實現是由暴露服務器側功能,使你的通知請求執行命令的SqlNotificationRequest類提供。
高級實現由SqlDependency類提供,該類提供了源應用程序和SQL Server之間的通知功能的高級抽象,使您可以使用依賴關係來檢測服務器。在大多數情況下,這是通過使用SQL Server的.NET Framework數據提供程序的託管客戶端應用程序來利用SQL Server通知功能的最簡單和最有效的方法。
此外,使用ASP.NET 2.0或更高版本構建的Web應用程序可以使用SqlCacheDependency輔助類。
這是因爲基本爲「A的SqlDependency對象可以用,以便在查詢結果從那些最初檢索不同,以檢測一個SqlCommand相關聯。」
必須首先Enable Query Notifications,並按照Creating a Query for Notification
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object which directly references (no synonyms) the data you want to check for changes.
using (SqlCommand command=new SqlCommand("SELECT value1 FROM [Table]", connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the refence in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange+=new OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
}
// Handler method
void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
// Handle the event (for example, invalidate this cache entry).
}
void Termination()
{
// Release the dependency.
SqlDependency.Stop(connectionString, queueName);
}
這不會給我插入的行 – 2018-03-02 11:32:09
如果我理解你,你要當你的SQL Server運行的刀片選擇在您的C#應用程序觸發一個事件? – paqogomez 2014-09-04 16:12:46
@paqogomez正確!有點像ssms中的觸發器,我想在C#中觸發一個# – Volearix 2014-09-04 16:14:56
你想檢測什麼時候從C#應用程序中的數據庫中發生變化? SQL Server不會推送通知,所以你將不得不輪詢一些東西。你可以做的一件事就是在需要的地方添加一個'INSERT TRIGGER',它從日誌記錄到審計表和'SELECT'。 – Zer0 2014-09-04 16:15:10