SqlDependency性能低下

时间:2014-08-18 13:49:07

标签: c# sqldependency

我使用SqlDependency的查询通知,这是方案:

我有一个包含100条记录的小表,但这些记录中的数据非常大

以下是代码:

private void AutoUpdate()
{
    SqlDependency.Stop(connectionstring);
    SqlDependency.Start(connectionstring);

    using (SqlConnection cn = new SqlConnection(connectionstring))
    {
        using (SqlCommand cmd = cn.CreateCommand())
        {
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = @"Select [Number], [Creation date],[Createdby], [Approved]  from  [dbo].[MyTable] Order By Number";

            dt = new DataTable();
            cmd.Notification = null; 
            SqlDependency dep = new SqlDependency(cmd); 
            dep.OnChange += new OnChangeEventHandler(dep_OnChange); 
            cn.Open(); 

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                dt.Load(dr);
            }

            dataGridView1.DataSource = dt;
        }
    } 
}

对于OnChange事件,我使用以下代码

private void dep_OnChange(object sender, SqlNotificationEventArgs e)
{ 
    if (this.InvokeRequired)
    {
        dataGridView1.BeginInvoke(new MethodInvoker(AutoUpdate)); 
    }
    else
    { 
        AutoUpdate(); 
    }

    SqlDependency dep = sender as SqlDependency;
    dep.OnChange -= new OnChangeEventHandler(dep_OnChange);
}

如果用户更改了我的Datagridview中的任何值,我还会使用CellValueChanged事件来触发

问题是:当用户更改一个单元格的值时,它会更新数据库,然后触发OnChange事件,导致重新加载包含所有记录的所有数据表

想象一下,用户想要为前50个记录填充值{0'的NUMBER字段

用户只需按下箭头键,然后按键盘上的键0,这将导致发送和接收大量数据,因为应用程序将在每次按下后从数据库接收数据表,并在尝试时我经历了一个非常缓慢的表现

是否有更好的方法来实现查询通知?

有没有办法让OnChange事件仅适用于受影响的行?不是整张桌子?

0 个答案:

没有答案