gpt4 book ai didi

c# - SqlDependency 常量数据库命中

转载 作者:行者123 更新时间:2023-11-30 12:12:01 25 4
gpt4 key购买 nike

我刚刚从 Microsoft 官方来源复制了示例 http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80).aspx我对此感到困惑。运行应用程序后,即使没有任何东西使用该表,它也会不断地访问数据库?我想当那个表真正改变时事件会触发?我不希望它每秒都进行持续的数据库调用,这太糟糕了。

我做错了什么吗?我想我不确定是什么。任何人都有一个很好的例子的链接最好不是 MSDN。

提前致谢,Onam。

这是SQL:

return "SELECT [ID],[FromMachine],[FromStore],[FromUser] FROM dbo.Store_Message";

根据要求,所有代码:

    public partial class Form1 : Form
{
string connectionString = "server=localhost;database=usicoal;uid=admin;password=";

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
GetNames();
}

private bool DoesUserHavePermission()
{
try
{
SqlClientPermission clientPermission = new SqlClientPermission(PermissionState.Unrestricted);
clientPermission.Demand();
return true;
}
catch
{
return false;
}
}

void dep_OnChange(object sender, SqlNotificationEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MethodInvoker(GetNames));
}
else
{
GetNames();
}
SqlDependency dep = sender as SqlDependency;
dep.OnChange -= new OnChangeEventHandler(dep_OnChange);
}

private void GetNames()
{
if (!DoesUserHavePermission())
return;

SqlDependency.Stop(connectionString);
SqlDependency.Start(connectionString);

using (SqlConnection cn = new SqlConnection(connectionString))
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT ID FROM dbo.[BTE_SIMPLE_STORE_MESSAGE]";
cmd.Notification = null;

SqlDependency dep = new SqlDependency(cmd);
dep.OnChange += new OnChangeEventHandler(dep_OnChange);

cn.Open();

using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
}
}
}
}
}
}

最佳答案

SqlDependency通常按您预期的那样工作。如果您的数据库中发生了某些更改,它会触发事件。如果您的查询有问题,则会不断调用。使用完整的两部分表名很重要(例如 dbo.TableName)。

MSDN 文档还不错 - 看看这个更新的 article或者这个 one版本。

关于c# - SqlDependency 常量数据库命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337641/

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