gpt4 book ai didi

asp.net - SQLDependency Onchange 事件始终在没有数据更改的情况下触发

转载 作者:行者123 更新时间:2023-12-02 21:17:27 25 4
gpt4 key购买 nike

我在控制台项目上使用它。
.NET框架:4.5

在我的测试代码中,尽管数据库中没有数据更改,但 SQLDependency onChange 始终会触发。

class Program
{
private static string _connStr;

static void Main(string[] args)
{
_connStr = "data source=xxx.xxx.xx.xx;User Id=xxx;Password=xxx; Initial Catalog=xxx";
SqlDependency.Start(_connStr);
UpdateGrid();
Console.Read();
}


private static void UpdateGrid()
{
using (SqlConnection connection = new SqlConnection(_connStr))
{
using (SqlCommand command = new SqlCommand("select msgdtl,msgid From NotifyMsg", connection))
{
command.CommandType = CommandType.Text;
connection.Open();
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

SqlDataReader sdr = command.ExecuteReader();
Console.WriteLine();
while (sdr.Read())
{
Console.WriteLine("msgdtl:{0}\t (msgid:{1})", sdr["msgdtl"].ToString(), sdr["msgid"].ToString());
}
sdr.Close();
}
}
}

private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
UpdateGrid();
}

当我开始运行时,onChange 事件会触发并且永远不会停止。但我的数据库没有任何变化。

最佳答案

尝试检查 dependency_OnChnage 方法中的 SqlNotificationEventArgs 对象。看起来你那里有一个错误。我曾经有过相同的 SqlDependency 行为,通过将 select msgdtl,msgid From NotifyMsg 更改为 select msgdtl,msgid From dbo.NotifyMsg 解决了问题> (已添加 dbo 语句)。

但我应该警告你:小心使用 SqlDependency类 - 它有 problems内存泄漏。不过,您可以使用 SqlDependency 类的开源实现 - SqlDependencyEx 。它使用数据库触发器和 native Service Broker 通知来接收有关表更改的事件。这是一个使用示例:

int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME))
{
sqlDependency.TableChanged += (o, e) => changesReceived++;
sqlDependency.Start();

// Make table changes.
MakeTableInsertDeleteChanges(changesCount);

// Wait a little bit to receive all changes.
Thread.Sleep(1000);
}

Assert.AreEqual(changesCount, changesReceived);

使用 SqlDependecyEx,您可以单独监视 INSERT、DELETE、UPDATE,并在事件参数对象中接收实际更改的数据 (xml)。希望这有帮助。

关于asp.net - SQLDependency Onchange 事件始终在没有数据更改的情况下触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29726738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com