C# SQL中的SQL依赖关系和数据引用

C# SQL中的SQL依赖关系和数据引用,c#,sql-server,sqldependency,C#,Sql Server,Sqldependency,当我们处理sql依赖关系时,我们需要始终引用下面的sql,从[bba reman].MyLog中选择ActivityDate 我只是想知道如果我用这种方式编写上面的sql,那么它能工作吗 从[bba reman].MyLog中选择前1个活动日期 从[bba reman].MyLog中选择前五名活动日期 我正在寻求建议和指导 private void RegisterNotification() { string tmpdata = ""; System.Data.SqlClien

当我们处理sql依赖关系时,我们需要始终引用下面的sql,从[bba reman].MyLog中选择ActivityDate

我只是想知道如果我用这种方式编写上面的sql,那么它能工作吗

从[bba reman].MyLog中选择前1个活动日期

从[bba reman].MyLog中选择前五名活动日期

我正在寻求建议和指导

private void RegisterNotification()
{
    string tmpdata = "";
    System.Data.SqlClient.SqlDependency.Stop(connectionString);
    System.Data.SqlClient.SqlDependency.Start(connectionString);

    try
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            SqlCommand cmd = conn.CreateCommand();

            cmd.CommandText = "SELECT ActivityDate FROM [bba-reman].MyLog";
            dep = new SqlDependency(cmd);
            dep.OnChange += new OnChangeEventHandler(OnDataChange);

            SqlDataReader dr = cmd.ExecuteReader();
            {
                while (dr.Read())
                {
                    if (dr[0] != DBNull.Value)
                    {
                        tmpdata = dr[0].ToString();
                    }
                }
            }

            dr.Dispose();
            cmd.Dispose();
        }
    }
    finally
    {
        //SqlDependency.Stop(connStr);
    }
}

根据SQLServer联机丛书(),使用QueryNotifications的限制之一是语句不能使用TOP表达式。SqlDependency只是负责ServiceBroker管道的QueryNotifications的更高级别实现。

该类有很多限制以及内存泄漏。缺少
TOP
指令就是其中之一。您可以使用SqlDependency类的开源实现-。它使用数据库触发器和本机ServiceBroker通知来接收有关表更改的事件。这是一个使用示例:

int changesReceived=0;
使用(SqlDependencyEx SqlDependencyEx=new SqlDependencyEx(
测试\连接\字符串、测试\数据库\名称、测试\表\名称)
{
sqlDependency.TableChanged+=(o,e)=>changesReceived++;
sqlDependency.Start();
//更改表格。
MakeTableInsertDeleteChanges(changesCount);
//请稍等,以接收所有更改。
睡眠(1000);
}
断言.AreEqual(changesCount,changesReceived);

使用
SqlDependecyEx
可以分别监视
插入
删除
更新
,并接收事件args对象中实际更改的数据(
xml
)。过滤传入消息有助于实现理想的行为。希望这能有所帮助。

我不确定我是否完全理解您的问题。是否要对顶级查询进行排序:按ActivityDate DESCyes从[bba reman]ORDER中选择TOP 1 ActivityDate如果我将该查询提交给sql dependency,那么它是否工作?可以通知更改吗?是的,您可以将该查询提交给SqlDependency,它应该可以工作。