精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 C# 和 SQL Server 實現(xiàn)數(shù)據(jù)庫的實時數(shù)據(jù)同步

數(shù)據(jù)庫 SQL Server
SQLDependency: 通過 SQLDependency 監(jiān)聽數(shù)據(jù)表變化,允許我們對 SourceTable 進(jìn)行實時監(jiān)聽。當(dāng)數(shù)據(jù)更改時自動觸發(fā) OnChange 事件。重新開啟監(jiān)聽: 數(shù)據(jù)變化后,必須重新啟動監(jiān)聽,以確保程序在后續(xù)的變化中繼續(xù)有效。

在現(xiàn)代應(yīng)用程序中,及時更新不同數(shù)據(jù)庫之間的數(shù)據(jù)至關(guān)重要。本文將介紹如何在 SQL Server 中使用 C# 實現(xiàn)數(shù)據(jù)的實時同步。我們將使用 SQLDependency 類來監(jiān)聽數(shù)據(jù)庫表的變化,并將這些變化實時地同步到另一張表中。

前提條件

在開始之前,請確保已經(jīng)設(shè)置好兩個 SQL Server 數(shù)據(jù)庫:

  • SourceDB: 包含你需要監(jiān)聽的表。
  • TargetDB: 目標(biāo)數(shù)據(jù)庫,用于同步數(shù)據(jù)。

配置 SQL Server

首先,需要啟用 SQL Server 的查詢通知服務(wù),以便支持 SQLDependency。請使用以下命令啟用數(shù)據(jù)庫服務(wù)代理:

查看

SELECT name, is_broker_enabled  
FROM sys.databases;  


ALTER DATABASE SourceDB SET ENABLE_BROKER;

編寫 C# 程序

下面的 C# 程序?qū)⑹褂?SQLDependency 來監(jiān)聽 SourceDB 中的 SourceTable 表的變化。我們將在數(shù)據(jù)插入時同步到 TargetDB 中的 TargetTable。

程序代碼

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;


class Program
{
    private static bool _continueRunning = true;


    static void Main()
    {
        Console.WriteLine("數(shù)據(jù)同步程序已啟動。按 'Q' 鍵退出。");


        // 設(shè)置連接字符串  
        string sourceConnectionString = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString;
        string targetConnectionString = ConfigurationManager.ConnectionStrings["TargetDB"].ConnectionString;


        // 啟用 SQLDependency  
        SqlDependency.Start(sourceConnectionString);


        try
        {
            while (_continueRunning)
            {
                try
                {
                    using (SqlConnection sourceConnection = new SqlConnection(sourceConnectionString))
                    {
                        sourceConnection.Open();
                        StartListening(sourceConnection);


                        // 保持連接打開狀態(tài)  
                        while (_continueRunning)
                        {
                            if (Console.KeyAvailable)
                            {
                                var key = Console.ReadKey(true).Key;
                                if (key == ConsoleKey.Q)
                                {
                                    _continueRunning = false;
                                    break;
                                }
                            }
                            Thread.Sleep(100);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"發(fā)生錯誤: {ex.Message}");
                    Console.WriteLine("5秒后重試...");
                    Thread.Sleep(5000);
                }
            }
        }
        finally
        {
            SqlDependency.Stop(sourceConnectionString);
            Console.WriteLine("數(shù)據(jù)同步程序已停止。");
        }
    }


    private static void StartListening(SqlConnection connection)
    {
        using (SqlCommand command = new SqlCommand("SELECT ID, Name, Value, Created_Time FROM dbo.t1", connection))
        {
            SqlDependency dependency = new SqlDependency(command);
            dependency.OnChange += new OnChangeEventHandler(OnDataChange);


            using (SqlDataReader reader = command.ExecuteReader())
            {
                // 初次加載數(shù)據(jù)處理  
            }
        }
    }


    private static void OnDataChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Info == SqlNotificationInfo.Insert)
        {
            Console.WriteLine("數(shù)據(jù)已插入。事件類型: " + e.Info.ToString());
            SyncData();
        }


        // 重新啟用監(jiān)聽  
        string sourceConnectionString = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString;
        using (SqlConnection sourceConnection = new SqlConnection(sourceConnectionString))
        {
            sourceConnection.Open();
            StartListening(sourceConnection);
        }
    }


    private static void SyncData()
    {
        string sourceConnectionString = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString;
        string targetConnectionString = ConfigurationManager.ConnectionStrings["TargetDB"].ConnectionString;


        using (SqlConnection sourceConnection = new SqlConnection(sourceConnectionString))
        using (SqlConnection targetConnection = new SqlConnection(targetConnectionString))
        {
            sourceConnection.Open();
            targetConnection.Open();


            // 獲取最新插入的數(shù)據(jù)
            SqlCommand fetchDataCommand = new SqlCommand("SELECT TOP 1 * FROM t1 ORDER BY Created_Time DESC", sourceConnection);
            using (SqlDataReader dataReader = fetchDataCommand.ExecuteReader())
            {
                if (dataReader.Read())
                {
                    Guid id = (Guid)dataReader["ID"];
                    string name = (string)dataReader["Name"];
                    decimal value = (decimal)dataReader["Value"];
                    DateTime created_time = (DateTime)dataReader["created_time"];


                    // 將數(shù)據(jù)插入到 TargetTable
                    SqlCommand insertCommand = new SqlCommand("INSERT INTO t1 (ID, Name, Value,Created_Time) VALUES (@ID, @Name, @Value,@Created_Time)", targetConnection);
                    insertCommand.Parameters.AddWithValue("@ID", id);
                    insertCommand.Parameters.AddWithValue("@Name", name);
                    insertCommand.Parameters.AddWithValue("@Value", value);
                    insertCommand.Parameters.AddWithValue("@Created_Time", created_time);


                    insertCommand.ExecuteNonQuery();
                }
            }
        }
    }
}

圖片圖片

增加更新后同步

private static void SyncUpdatedData()
{
    string sourceConnectionString = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString;
    string targetConnectionString = ConfigurationManager.ConnectionStrings["TargetDB"].ConnectionString;


    using (SqlConnection sourceConnection = new SqlConnection(sourceConnectionString))
    using (SqlConnection targetConnection = new SqlConnection(targetConnectionString))
    {
        sourceConnection.Open();
        targetConnection.Open();


        // 獲取最近更新的數(shù)據(jù)  
        // 注意:這里假設(shè)你有一個 Last_Updated_Time 字段來跟蹤更新時間  
        SqlCommand fetchDataCommand = new SqlCommand("SELECT TOP 1 * FROM t1 ORDER BY Last_Updated_Time DESC", sourceConnection);
        using (SqlDataReader dataReader = fetchDataCommand.ExecuteReader())
        {
            if (dataReader.Read())
            {
                Guid id = (Guid)dataReader["ID"];
                string name = (string)dataReader["Name"];
                decimal value = (decimal)dataReader["Value"];
                DateTime last_updated_time = (DateTime)dataReader["Last_Updated_Time"];


                // 更新目標(biāo)表中的數(shù)據(jù)  
                SqlCommand updateCommand = new SqlCommand(
                    "UPDATE t1 SET Name = @Name, Value = @Value, Last_Updated_Time = @Last_Updated_Time  WHERE ID = @ID",
                    targetConnection);
                updateCommand.Parameters.AddWithValue("@ID", id);
                updateCommand.Parameters.AddWithValue("@Name", name);
                updateCommand.Parameters.AddWithValue("@Value", value);
                updateCommand.Parameters.AddWithValue("@Last_Updated_Time", last_updated_time);


                int rowsAffected = updateCommand.ExecuteNonQuery();
                if (rowsAffected > 0)
                {
                    Console.WriteLine($"已同步更新的數(shù)據(jù): ID={id}, Name={name}, Value={value}, Created_Time={last_updated_time}");
                }
                else
                {
                    Console.WriteLine($"未找到要更新的記錄: ID={id}");
                }
            }
        }
    }
}

配置文件 (App.config)

確保在你的項目中包含一個配置文件來管理數(shù)據(jù)庫連接字符串。

<?xml versinotallow="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="SourceDB" connectionString="Data Source=your_source_server;Initial Catalog=SourceDB;Integrated Security=True" />
        <add name="TargetDB" connectionString="Data Source=your_target_server;Initial Catalog=TargetDB;Integrated Security=True" />
    </connectionStrings>
</configuration>

關(guān)鍵點說明

  • SQLDependency: 通過 SQLDependency 監(jiān)聽數(shù)據(jù)表變化,允許我們對 SourceTable 進(jìn)行實時監(jiān)聽。當(dāng)數(shù)據(jù)更改時自動觸發(fā) OnChange 事件。
  • 重新開啟監(jiān)聽: 數(shù)據(jù)變化后,必須重新啟動監(jiān)聽,以確保程序在后續(xù)的變化中繼續(xù)有效。

注意事項

  • 確保在 SQL Server 上啟用查詢通知和服務(wù)代理。
  • SQLDependency 適用于簡單查詢,不能包括復(fù)雜查詢、聯(lián)接或聚合。
  • 如果項目對性能和實時性要求較高,建議結(jié)合其他工具或技術(shù)方案,如 Change Tracking 或 Change Data Capture 等。

通過以上步驟,你可以實現(xiàn)對 SQL 數(shù)據(jù)庫變化的實時監(jiān)聽和數(shù)據(jù)同步,從而保持?jǐn)?shù)據(jù)庫之間的數(shù)據(jù)一致性和實時性。

責(zé)任編輯:武曉燕 來源: 技術(shù)老小子
相關(guān)推薦

2020-09-21 11:30:28

CanalMySQL數(shù)據(jù)庫

2010-07-01 15:44:22

SQL Server數(shù)

2010-07-22 11:17:52

SQL Server數(shù)

2010-08-27 09:59:51

SQL Server

2009-08-03 14:17:18

C#連接AccessC#連接SQL Ser

2009-09-04 17:29:01

C#創(chuàng)建SQL Ser

2017-05-25 08:52:08

SQL Server數(shù)據(jù)庫

2011-07-13 16:19:54

存儲過程SQL Server數(shù)

2009-05-14 10:02:59

實時數(shù)據(jù)SQL Server商業(yè)智能

2010-07-08 11:05:14

SQL Server數(shù)

2011-09-01 16:01:44

C#SQL Server 表類型參數(shù)傳遞

2011-06-07 17:01:44

2011-08-01 22:41:49

SQL Server數(shù)Insert

2024-12-06 08:29:29

2019-10-08 15:54:42

SQL數(shù)據(jù)庫技術(shù)

2009-11-18 16:16:51

Oracle數(shù)據(jù)庫

2009-03-19 10:08:09

C#數(shù)據(jù)庫查詢

2023-12-28 10:58:45

2010-07-15 17:28:50

SQL Server

2012-08-28 10:52:58

IBMdW
點贊
收藏

51CTO技術(shù)棧公眾號

欧美一区二区三区久久| 黄色免费在线看| 中文亚洲欧美| 亚洲精品一区二区三区婷婷月| 国产97在线 | 亚洲| 日韩电影在线观看完整版| 久久精品国语| 中文字幕日韩在线播放| 国内自拍第二页| 在线不卡日本v二区707| 不卡av免费在线观看| 欧美重口另类videos人妖| 免费在线观看a视频| 亚洲国产一区二区久久| 亚洲自拍偷拍九九九| 精品综合在线| 中文字幕一级片| 综合久久综合| 日韩精品视频在线免费观看| 亚洲成色www.777999| mm1313亚洲国产精品美女| 成人免费毛片嘿嘿连载视频| 日本精品久久久久影院| 国产精品理论在线| youjizz亚洲| 91国产福利在线| 好色先生视频污| 熟妇人妻一区二区三区四区| 麻豆国产欧美一区二区三区| 国模精品系列视频| 国产美女永久免费无遮挡| 久久爱www.| 色老汉av一区二区三区| 91免费国产精品| 9色在线观看| a在线播放不卡| 91精品久久久久久久久久| 欧美人妻精品一区二区三区| 国产亚洲精品美女久久久久久久久久| 日韩免费观看高清完整版在线观看| 欧美日韩在线中文| 欧美videossex另类| 中文字幕一区二区视频| 欧美日韩高清在线一区| 亚洲精品成av人片天堂无码| 免费av成人在线| 91精品国产亚洲| 欧美成人aaa片一区国产精品| 视频一区欧美| 日韩国产激情在线| 99精品视频免费版的特色功能| 亚洲人免费短视频| 黄色91在线观看| av在线免费观看国产| 调教视频免费在线观看| 久久精品水蜜桃av综合天堂| 国产乱码精品一区二区三区卡| 国产精品毛片一区视频播| 奇米影视一区二区三区小说| 欧美性资源免费| 久久久久97国产| 亚洲一级淫片| 日韩视频永久免费观看| youjizz亚洲女人| 九九在线精品| 亚洲欧美激情精品一区二区| 日本少妇xxxx| 99久久免费精品国产72精品九九| 91精品国产91久久综合桃花| 亚洲人视频在线| 国产成人免费| 欧美在线免费视屏| 日韩大片一区二区| 国产成人毛片| 欧美美女黄视频| 999这里有精品| 成人乱码手机视频| 欧美日本免费一区二区三区| 天天干天天av| 韩国精品视频在线观看| 欧美日本一区二区三区四区| 一级做a免费视频| 色综合视频一区二区三区44| 91精品国产91久久久久久一区二区 | 日本一区二区三不卡| 天堂成人在线| 久久这里只精品最新地址| 精品久久中出| 牛牛热在线视频| 国产午夜亚洲精品羞羞网站| 日韩欧美亚洲在线| 熟妇人妻中文av无码| 成人高清视频在线| 免费h精品视频在线播放| 国产高清一级毛片在线不卡| 国产精品久久久久久久久图文区| 亚洲一区二区三区加勒比 | 国产精品一色哟哟哟| 97av影视网在线观看| 欧美性猛交 xxxx| xnxx国产精品| 亚洲一区二区三区在线观看视频| 久久亚洲天堂| 亚洲国产综合色| aa在线免费观看| jizz欧美| 精品国产乱码久久久久久久久| 熟女丰满老熟女熟妇| 狠狠操综合网| 免费av一区二区| 国产午夜性春猛交ⅹxxx| 蜜桃视频在线一区| 国产精品久久久久久久久婷婷 | 亚洲自拍小视频| 天天操天天操天天操| 国产精品欧美极品| 性欧美大战久久久久久久| 四虎4545www国产精品| 日韩一卡二卡三卡四卡| 欧洲女同同性吃奶| 欧美在线不卡| 国产精品h片在线播放| 99这里有精品视频| 久久久777精品电影网影网| 免费看污污视频| 欧美日韩电影免费看| 91麻豆精品国产| 偷拍女澡堂一区二区三区| 国产精品x453.com| 日本久久久久久久| 刘玥91精选国产在线观看| 国产精品网曝门| 无码人妻丰满熟妇区96| 国产95亚洲| 亚洲老板91色精品久久| 加勒比婷婷色综合久久| 丝袜国产日韩另类美女| 国产成人精品日本亚洲11| www.91在线| 精品福利一区二区| 91精品国产高清91久久久久久 | 精品国产区一区| 一区二区三区在线播放视频| 久久久精品五月天| 国内不卡一区二区三区| 亚洲精品一线| 欧美日韩国产一级二级| a天堂中文字幕| 在线视频免费在线观看一区二区| 91超碰在线免费观看| av午夜在线| 色综合久久中文综合久久牛| 人妻互换一二三区激情视频| 欧美激情1区2区| 91在线视频免费| av在线二区| 欧美自拍偷拍午夜视频| 欧美老熟妇乱大交xxxxx| 一本色道久久| 国产一区二区不卡视频在线观看| a毛片在线播放| 欧美久久高跟鞋激| 国产成人精品视频免费| 日本伊人精品一区二区三区观看方式| 美女三级99| 久久男人av资源站| 亚洲国产日韩欧美综合久久 | va婷婷在线免费观看| 中文字幕一区三区| 亚洲免费av一区| 欧美电影一二区| 国产精品一区av| 香蕉视频在线看| 欧美日韩国产首页| 看黄色录像一级片| 国产尤物一区二区在线| 桥本有菜av在线| 精品国产一区二区三区2021| 久久综合伊人77777蜜臀| 11024精品一区二区三区日韩| 国产精品久久久久一区二区三区 | h片在线观看视频免费| 亚洲经典中文字幕| 色av性av丰满av| 国产日韩精品久久久| 免费看污污网站| 久久久久国产精品| 成人影片在线播放| 欧美a级在线观看| 亚洲视频精品在线| 一级黄色免费片| 亚洲四区在线观看| 手机免费看av片| 欧美综合二区| 亚洲国产午夜伦理片大全在线观看网站| 国产成人精品一区二区三区免费| 久久亚洲精品毛片| 日本激情一区二区三区| 日本久久一区二区| 91高清免费看| 91丨九色丨黑人外教| 在线观看的毛片| 91不卡在线观看| 国产一区二区三区四区五区在线 | 69av一区二区三区| 日本三级视频在线| 国产欧美精品一区二区三区四区| 奇米777在线视频| 99综合精品| 亚洲精品在线免费| 精品视频自拍| 国产精品久久久久久五月尺| h视频在线免费观看| 日韩av最新在线| 国产精品伦一区二区三区| 精品高清美女精品国产区| 你懂得在线观看| 99国产精品一区| 国产精品区在线| 亚洲每日更新| 伊人狠狠色丁香综合尤物| 国产三级精品三级在线观看国产| 国产精品啪视频| 蜜桃视频动漫在线播放| 久久精品视频在线| 欧美日韩国产中文字幕在线| 日韩欧美国产三级| 自拍偷拍福利视频| 亚洲成人久久影院| 91 在线视频| 国产亚洲精品免费| 成人性生活免费看| 极品少妇一区二区| 成人性做爰aaa片免费看不忠| 狠狠入ady亚洲精品经典电影| 亚洲在线欧美| 一呦二呦三呦国产精品| 成人av免费在线看| 一区二区三区| 国产精品99导航| 久草资源在线视频| 国产福利亚洲| 97精品免费视频| 国产原厂视频在线观看| 国产亚洲精品一区二555| 色欲av伊人久久大香线蕉影院| 欧美三级在线看| 精品国产乱子伦| 亚洲综合一区二区| 男女性高潮免费网站| 国产精品丝袜久久久久久app| 丰满圆润老女人hd| 99久久久精品免费观看国产蜜| 国内av免费观看| 久久国产生活片100| 日韩视频在线免费看| 亚洲一区一卡| 日日橹狠狠爱欧美超碰| 精品999日本| 日本大片免费看| 午夜国产精品视频免费体验区| 一区二区视频在线观看| 欧美gvvideo网站| 亚洲不卡1区| 亚洲va久久| 鲁片一区二区三区| 亚洲国产欧美日韩在线观看第一区| 国产精品免费观看高清| 1769国产精品视频| 国产精品一区二区三区在线| 成人av影音| 国内成+人亚洲| 日韩av黄色在线| 久久99精品久久久久久三级 | 999久久久免费精品国产| 亚洲v国产v在线观看| 色琪琪久久se色| 一区二区三区四区视频在线观看| 欧美a级成人淫片免费看| 中文字幕成人一区| 欧美日韩一区二区国产| 97超碰在线人人| 国产欧美日韩综合一区在线播放| 国产网站免费在线观看| 久久综合五月| 亚洲一级免费观看| 国产日本精品| 欧美亚洲一二三区| 久久青草久久| 日本久久精品一区二区| 久久精品国产色蜜蜜麻豆| 欧洲在线免费视频| 成人免费毛片aaaaa**| 久久精品国产亚洲av麻豆| 亚洲国产高清aⅴ视频| 26uuu成人网| 午夜欧美2019年伦理| 在线免费观看av网址| 欧美日韩国产经典色站一区二区三区| 国产精品高潮呻吟av| 精品久久久久香蕉网| 国产免费av在线| 伦理中文字幕亚洲| 日韩深夜视频| 成人a免费视频| 国产精品丝袜在线播放| 涩涩涩999| 黄色日韩精品| www.99av.com| 成人性视频免费网站| 手机看片日韩av| 亚洲一区国产视频| 国产一级片一区二区| 日韩精品一区二区三区视频 | 亚洲成人看片| 91精品国产一区二区三区动漫 | 91精品国产自产| 中文字幕亚洲综合久久菠萝蜜| 国产亚洲精品成人| 欧美日韩一区视频| 香港三日本三级少妇66| xxxx欧美18另类的高清| 筱崎爱全乳无删减在线观看 | 亚洲激情第一页| 午夜在线小视频| 青草青草久热精品视频在线观看| 亚洲小说春色综合另类电影| 婷婷久久五月天| 一区二区三区高清视频在线观看| 四虎国产精品永久免费观看视频| 久久精品一二三| 日本三级欧美三级| 欧美夫妻性生活| 青青久草在线| 亚洲欧美一区二区三区在线| 青草青在线视频| 欧日韩不卡在线视频| 综合中文字幕| 视频一区不卡| 午夜影院日韩| www.欧美com| 国产欧美一区二区精品忘忧草| 在线观看中文字幕视频| 91精品一区二区三区在线观看| 国产在线网站| 久久久久久成人| 日本一区免费网站| 欧美一区二区三区在线播放 | 亚洲女人被黑人巨大进入| 丝袜国产在线| 91精品国产综合久久久久久久久 | 久久夜色精品国产噜噜av| 69av视频在线| 在线播放日韩导航| porn视频在线观看| 浅井舞香一区二区| 国产一区在线电影| 成人小视频在线观看免费| 日本不卡视频在线| 欧美丰满少妇人妻精品| 午夜欧美一区二区三区在线播放| 日本黄色大片视频| 欧美激情视频在线免费观看 欧美视频免费一| 四虎精品永久免费| 日韩精品无码一区二区三区| 亚洲另类视频| 蜜桃传媒一区二区亚洲av| 午夜电影一区二区| 五月婷婷丁香网| 国内自拍欧美激情| av综合网址| 国产3p露脸普通话对白| 成人性视频免费网站| 日韩男人的天堂| 欧美刺激脚交jootjob| jizz日韩| 成人亲热视频网站| 国产精品久久久久蜜臀| 亚洲午夜精品在线观看| 玉足女爽爽91| 少妇人妻一区二区| 91国产中文字幕| 蜜桃国内精品久久久久软件9| 青青在线视频免费| 欧美经典一区二区| 91中文字幕在线播放| 在线观看精品国产视频| 神马电影网我不卡| 久久久久九九九| 亚洲一区成人| 免费观看av网站| 欧美日韩精品综合在线| 色综合久久影院| y111111国产精品久久婷婷| 在线精品在线| 欧美成人午夜精品免费| 欧美日韩免费一区二区三区 | 国产精品免费区二区三区观看 | 成人欧美一区二区三区黑人| 影音先锋亚洲精品|