zoukankan      html  css  js  c++  java
  • 使用SqlDependency将数据库中的数据更新到应用

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
    
        System.Data.SqlClient.SqlConnection conn = null;
        System.Data.SqlClient.SqlCommand command = null;
        // Set connection string
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder
        {
            // set server
            DataSource = @"datasource name",
            // set database
            InitialCatalog = @"catalog name",
            // access the database using the existing windows security certificate
            IntegratedSecurity = true
        };
    
        private void Form1_Load(object sender, EventArgs e)
        {
    
            conn = new System.Data.SqlClient.SqlConnection(builder.ConnectionString);
            command = conn.CreateCommand();
            command.CommandText = "select id,name from dbo.tabletest where id<>20 order by id desc ";
    
            // Start
            SqlDependency.Start(builder.ConnectionString);
            // Get data
            GetData();
        }
    
        private void GetData()
        {
            command.Notification = null;
            SqlDependency dependency = new SqlDependency(command);
            dependency.OnChange += new OnChangeEventHandler(sqlDependency_OnChange);
    
            using (SqlDataAdapter adapter = new SqlDataAdapter(command))
            {
                System.Data.DataSet ds = new DataSet();
                adapter.Fill(ds, "test");
                dataGridView1.DataSource = ds.Tables["test"];
            }
    
        }
    
        void sqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            // Because it is a child thread, you need to update the ui with the invoke method.
            if (this.InvokeRequired)
            {
                this.Invoke(new OnChangeEventHandler(sqlDependency_OnChange), new object[] { sender, e });
            }
            else
            {
                SqlDependency dependency = (SqlDependency)sender;
                dependency.OnChange -= sqlDependency_OnChange;
                // After the notification, the current dependency is invalid, you need to re-get the data and set the notification.
                GetData();
            }
        }
    
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // Clear resource
            SqlDependency.Stop(builder.ConnectionString);
            conn.Close();
            conn.Dispose();
        }
    }

    Result:

  • 相关阅读:
    [LeetCode] Substring with Concatenation of All Words 解题报告
    [LeetCode] Symmetric Tree 解题报告
    [LeetCode] Unique Paths II 解题报告
    [LeetCode] Triangle 解题报告
    [LeetCode] Trapping Rain Water 解题报告
    [LeetCode] Text Justification 解题报告
    [LeetCode] Valid Sudoku 解题报告
    [LeetCode] Valid Parentheses 解题报告
    C++文件的批处理
    C++中两个类中互相包含对方对象的指针问题
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/10365442.html
Copyright © 2011-2022 走看看