Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测SQL数据库更改_C#_Sql_Listener_Service Broker_Sqldependency - Fatal编程技术网

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);
}