如何将multi-sql依赖项添加到该代码中



我在sql server中有个人表,其中包含字段id和名称

以及运行良好的csharp语句。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace SQLNotifications
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

string connectionstring = @"Server=EEPERSIAN-PCSQLEXPRESS;Database=Chatter;User ID=sa;pwd=1";
delegate void GridDelegate(DataTable table);
SqlDependency dep;
private void Form1_Load(object sender, EventArgs e)
{
SqlDependency.Start(connectionstring);
UpdateGrid();
}
private void UpdateGrid()
{
string sql = "select Name from dbo.person";
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(connectionstring))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
dep = new SqlDependency(cmd);
dep.OnChange += dep_OnChange;
using (SqlDataReader rdr = cmd.ExecuteReader())
{
dt.Load(rdr);
}
}
}
dataGridView1.Invoke(
(GridDelegate)delegate(DataTable table)
{
dataGridView1.DataSource = table; 
}
, dt);
}
private void dep_OnChange(object sender, SqlNotificationEventArgs e)
{
MessageBox.Show("Insert Accourd");
UpdateGrid();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
SqlDependency.Stop(connectionstring);
}
}
}

现在,我有两个问题:

1-我无法理解的这部分代码

dataGridView1.Invoke(
(GridDelegate)delegate(DataTable table)
{
dataGridView1.DataSource = table; 
}
, dt);

2-我想要监视多个表,而不是一个表我该怎么做

请帮我解决这个问题。

  1. 委托只是一个不返回任何内容的方法。这段代码只是对内联方法的调用

这样想:

MyDelegateFunction(dt);
private void MyDelegateFunction(DataTable table)
{
dataGridView1.DataSource = table; 
}

dt是传递到方法中的参数,它被设置为dataGridView的数据源

这是MSDN上关于该方法的文章。

2-如果监视多个表意味着要查看其中的数据,那么只需更改用于查询的sql即可。

此:

string sql = "select Name from dbo.person";

可能会更改为:

string sql = "select 
name, other, data 
from 
dbo.person p 
inner join dbo.anothertable a on p.personid = a.personid"

编辑:

经过一点澄清后,您希望在表上设置插入触发器来监视它们。我建议这样做:

  1. 发生插入,并触发OnInsert触发器
  2. 插入触发器将日志记录信息放入日志记录表中
  3. 您的c#应用程序轮询该表以获取新信息,并相应地执行

数据库中的一些数据更改中讨论了一些类似的想法。如何触发一些C#代码对这些更改进行处理?

最新更新