C# 如何将多sql依赖项添加到此代码中?

C# 如何将多sql依赖项添加到此代码中?,c#,sql-server,mongodb-.net-driver,C#,Sql Server,Mongodb .net Driver,我在sql server中有person表,其中包含字段id和名称 dataGridView1.Invoke( (GridDelegate)delegate(DataTable table) { dataGridView1.DataSource = table; } , dt); 还有csharp语句,效果很好 using

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

 dataGridView1.Invoke(
                (GridDelegate)delegate(DataTable table)
                {
                    dataGridView1.DataSource = table; 
                }
                , dt);
还有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-PC\SQLEXPRESS;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-我希望监视多个表而不是一个表。 我如何才能做到这一点?

请帮我解决这个问题

  • 委托只是一个不返回任何内容的方法。这段代码只是对内联方法的调用 你可以这样想:

     MyDelegateFunction(dt);
    
     private void MyDelegateFunction(DataTable table)
     {
        dataGridView1.DataSource = table; 
     }
    
    dt
    是传递到方法中的参数,它被设置为
    dataGridView的数据源

    下面是关于该方法的文章

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

    这:

    可能会更改为:

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

    在做了一点澄清之后,您希望在表上设置以监视它们。我建议这样做:

     MyDelegateFunction(dt);
    
     private void MyDelegateFunction(DataTable table)
     {
        dataGridView1.DataSource = table; 
     }
    
  • 插入发生,并触发OnInsert触发器
  • insert触发器将日志信息放入日志表中
  • 您的c#应用程序轮询该表以获取新信息,并相应地执行

  • 类似的一些想法在

    中讨论过,在我的sql回答中有一些伪代码,但我需要更多关于“监视多表”的信息,以提供更多信息。这就是您要找的吗?我的数据库有50多个表__;当它们更改时(大多数时间是在插入到表中之后),我希望根据最喜欢的表执行操作__;我该怎么做?请帮助u__;谢谢让我知道我的最新编辑是否通过向上投票和标记作为答案来帮助我。或者,如果有什么不清楚的地方。谢谢paqogomez,你说得对,但我想分别监视表。例如,当表上的人改变时,我想做动作“A”,当表2改变时,我想做动作“B”,我能做吗?@user1971217我想你可能有两个不同的想法。让我看看我是否明白。首先,如果您想知道什么时候有东西被插入到数据库中,请使用。然而,这只是sql。它不会将事件发送到您的c#程序。我想你只需要选一张桌子就行了。再次感谢paqogomez,我可以在任何表上创建任何触发器,但我不知道如何在执行时获取它们——触发器对我来说是最好的选择,但我的问题是我不知道如何在C中执行操作——在任何触发器执行后——你能帮我吗?@user1971217没有任何东西会向你的C应用程序发送信号。最好是轮询(循环查询)数据库。我在回答中的编辑步骤中对此进行了解释。