C# 检测SQL数据库更改
考虑这个例子:C# 检测SQL数据库更改,c#,sql,listener,service-broker,sqldependency,C#,Sql,Listener,Service Broker,Sqldependency,考虑这个例子: INSERT INTO [Table] (column1) SELECT value1 如果我要在SSMS中执行此命令,对于c窗体应用程序,我需要做什么才能识别此事件?类似于应用程序在发生此事件时显示MessageBox这样的简单操作。我似乎无法解决这个问题,也找不到任何有用的数据。我曾尝试使用SqlDependency,但运气不佳。如果这是我需要走的路,有人能帮我更好地理解这个概念吗?如果你想检测更改而不仅仅是插入,你可以使用。您是否阅读并尝试了链接中的示例 底层实现由Sq
INSERT INTO [Table] (column1)
SELECT value1
如果我要在SSMS中执行此命令,对于c窗体应用程序,我需要做什么才能识别此事件?类似于应用程序在发生此事件时显示MessageBox这样的简单操作。我似乎无法解决这个问题,也找不到任何有用的数据。我曾尝试使用SqlDependency,但运气不佳。如果这是我需要走的路,有人能帮我更好地理解这个概念吗?如果你想检测更改而不仅仅是插入,你可以使用。您是否阅读并尝试了链接中的示例 底层实现由SqlNotificationRequest类提供,该类公开服务器端功能,使您能够使用通知请求执行命令 高级实现由SqlDependency类提供,SqlDependency类在源应用程序和SQL Server之间提供通知功能的高级抽象,使您能够使用依赖项检测服务器中的更改。在大多数情况下,这是使用.NET Framework SQL Server数据提供程序的托管客户端应用程序利用SQL Server通知功能的最简单、最有效的方法 此外,使用ASP.NET 2.0或更高版本构建的Web应用程序可以使用SqlCacheDependency助手类 它与SqlDependency对象可以与SqlCommand关联一样基本,以便检测何时查询结果与最初检索的结果不同 你必须先走后走
如果我理解您的意思,您希望在sql server运行insert select时在c应用程序中触发事件?@paqogomez更正!有点像ssms中的触发器,我想要一个CY中的触发器。你想从C应用程序中检测数据库中的某些更改吗?SQL Server不推送通知,因此您必须轮询某些内容。您可以做的一件事是在需要时添加一个INSERT触发器,该触发器将日志记录到审核表中并从中进行选择。SQL Server支持编写基于CLR的触发器。这意味着您可以在插入内容时运行C代码。我建议您使用此选项,并让触发器以某种方式向应用程序发送事件。当某些内容发生更改或更新或插入某些内容时?当您尝试SQLDependency时发生了什么?这并没有给我插入的行try类似的东西:或者类似于这个巧妙的“ServiceBroker侦听器”的东西
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);
}