考虑这个例子:
INSERT INTO [Table] (column1)
SELECT value1
如果我要在SSMS中执行此命令,关于c#表单应用程序,为了识别此事件,我需要做什么?这个事件发生时显示MessageBox
的应用程序这么简单。我似乎无法解决这个问题或者找到任何有用的数据。我试图使用SqlDependency
,但没有运气。如果这是我需要走的道路,那么任何人都可以帮助我更好地理解这个概念吗?
答案 0 :(得分:8)
如果您想检测更改而不仅仅是插入,则可以使用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之间提供通知功能的高级抽象的类,使您可以使用依赖项来检测服务器。在大多数情况下,这是使用.NET Framework数据提供程序为SQL Server利用受管客户端应用程序利用SQL Server通知功能的最简单,最有效的方法。
此外,使用ASP.NET 2.0或更高版本构建的Web应用程序可以使用SqlCacheDependency帮助程序类。
它与&#34基本相同; 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);
}