SqlDependency常量数据库命中

问题描述 投票:4回答:2

我刚刚从官方Microsoft来源http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80).aspx复制了该示例,但我对此感到困惑。运行该应用程序后,即使没有使用该表,它也会使数据库持续命中?我以为该表实际更改时会触发事件?我不希望它每秒进行恒定的数据库调用,这太糟糕了。

我做错了什么吗?我想我还不确定。任何人都具有一个好的示例的链接,最好没有MSDN的链接。

感谢,奥南。

这是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())
                    {
                    }
                }
            }
        }
    }
}
c# sql sqldependency
2个回答
2
投票

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

MSDN文档还不错-请查看此最新的article或此one版本。


1
投票

发现上面的代码在我时很好:

  • 右键单击数据库选择属性
  • 选择选项
  • 将兼容性级别设置为SQL Server 2008(100)
  • 确定

使该代码正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.