SqlDependency 监听数据问题

Corner_hzd 2013-07-19 05:33:02

SqlDependency 监听数据出现无限刷新???
代码如下:
   
public partial class Form2 : Form
{
string _connStr;

public Form2()
{
_connStr = ConfigurationManager.ConnectionStrings["Students"].ToString();

InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SqlDependency.Start(_connStr);
UpdateGrid();
}

private void UpdateGrid()
{
string sqlstr = "select * from students";
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(_connStr))
{
using (SqlCommand command = new SqlCommand(sqlstr, conn))
{
command.CommandType = CommandType.Text;
conn.Open();

SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
SqlDataAdapter da = new SqlDataAdapter(command);

da.Fill(dt);
conn.Close();
}
}
selectDataSource(dt);
}

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

delegate void DataSource(DataTable dt);

private void selectDataSource(DataTable dt)
{
if (dataGridView1.InvokeRequired)
{
var d = new DataSource(selectDataSource);
Invoke(d, dt);
}
else
{
dataGridView1.DataSource = dt;
}
}
}
...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztszhq 2013-07-19
  • 打赏
  • 举报
回复
不会啊。。 你可以 另写一个方法 不带监听事件附加的。。 看还会执行第二次的 监听吗
海洋夜之星 2013-07-19
  • 打赏
  • 举报
回复
 private void UpdateGrid()        {            string sqlstr = "select * from students";            DataTable dt = new DataTable();            using (SqlConnection conn = new SqlConnection(_connStr))            {                using (SqlCommand command = new SqlCommand(sqlstr, conn))                {                    command.CommandType = CommandType.Text;                    conn.Open();                                        SqlDependency dependency = new SqlDependency(command);                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);                    SqlDataAdapter da = new SqlDataAdapter(command);                     da.Fill(dt);                    conn.Close();                }            }            selectDataSource(dt);        }
你在这方法里面注册了dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);事件后那事件还是调用UpdateGrid方法,感觉这边有问题啊,这样会一直无限注册该事件吧……

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧