精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

99精品中文字幕| 国产日韩av网站| 一级片视频网站| 中文字幕av亚洲精品一部二部| 3d动漫精品啪啪一区二区竹菊 | 97久久久久久| 国产一二三四五区| 欧美成年网站| 色综合天天综合狠狠| 中文字幕在线乱| 日本中文字幕一区二区有码在线 | 日本一二三区在线视频| 男女激情视频一区| 久久久久中文字幕2018| 国产视频不卡在线| 久久1电影院| 777午夜精品视频在线播放| 日本一道本久久| 成人av福利| 337p粉嫩大胆噜噜噜噜噜91av| 国产在线视频不卡| 日本视频免费观看| 亚洲第一黄色| 欧美成人久久久| 天天操天天舔天天射| 国产伦精品一区二区三区在线播放| 欧美日韩在线播放一区| 欧美牲交a欧美牲交aⅴ免费下载| av黄在线观看| 国产精品卡一卡二| 美国av一区二区三区| 亚洲精品久久久狠狠狠爱| 麻豆精品在线播放| 国产99久久精品一区二区 夜夜躁日日躁 | av成人资源网| 欧美一区二区福利视频| 中文字幕国内自拍| 免费日韩电影| 精品国产老师黑色丝袜高跟鞋| 大地资源第二页在线观看高清版| 国产黄色在线| 国产日韩欧美精品在线| 久久影视中文粉嫩av| 欧美一级淫片aaaaaa| 国产精品69久久久久水密桃| 成人黄色在线免费| 国产精品久久久久久免费免熟| 日韩激情视频在线观看| 欧美亚洲午夜视频在线观看| 欧美一级视频免费观看| 99精品国产一区二区青青牛奶 | 国产精品羞羞答答xxdd| 91精品在线观| 国产丝袜在线视频| 久久99热狠狠色一区二区| 91精品久久久久久| 国产精品亚洲lv粉色| 久久99国产精品久久99| 成人国产精品日本在线| 国产又粗又黄又爽视频| 精品无人码麻豆乱码1区2区| 91在线网站视频| 精品国产无码一区二区| 福利视频网站一区二区三区| 国产精品一区二区你懂得| 国产成人三级在线观看视频| 成人综合婷婷国产精品久久蜜臀| 国产亚洲二区| 日本中文字幕电影在线观看 | 亚洲精品美女在线观看| 中文字幕在线观看网址| 宅男在线一区| 中文亚洲视频在线| 四虎884aa成人精品| 88国产精品视频一区二区三区| 欧美成人激情图片网| 免费一级肉体全黄毛片| 中文日韩在线| 国产精品久久久久久久久久久新郎 | 久久大香伊蕉在人线观看热2| 四虎国产精品永远| 91视频一区二区| 婷婷四月色综合| 羞羞污视频在线观看| 天天影视涩香欲综合网| 中文字幕在线导航| 久久久国产精品入口麻豆| 欧美v国产在线一区二区三区| 国产黄色三级网站| 成人影院在线| 欧美丰满少妇xxxxx做受| 国产成人在线免费观看视频| 美女网站色91| 国产精品一区二区免费| 岛国视频免费在线观看| 亚洲欧洲av在线| 男人和女人啪啪网站| 日韩美香港a一级毛片| 精品对白一区国产伦| 亚洲第一综合网| 午夜精品久久久久99热蜜桃导演| 国产91精品久久久久久久| 中文字幕1区2区3区| 成人动漫中文字幕| 艳色歌舞团一区二区三区| www在线看| 欧美日韩成人在线| 久久久久亚洲AV成人无码国产| 成人在线电影在线观看视频| 高清欧美一区二区三区| 亚洲在线精品视频| 99久久婷婷国产综合精品电影| 亚洲自拍的二区三区| 神马久久午夜| 日韩视频一区二区在线观看| 亚洲自拍偷拍图| 亚洲精品一级| 99久热re在线精品996热视频| 国产三级在线| 欧美日韩免费网站| 免费黄色av网址| 色综合咪咪久久网| 国产精品 欧美在线| 日韩一级片免费| 亚洲精品国产一区二区精华液 | 99精品久久99久久久久| 中文字幕在线乱| 国产精品99久久久久久董美香| 亚洲精品久久久久| 久久久久久久久久久久国产| 激情综合色综合久久| 日本一区二区不卡高清更新| 国产乱码精品一区二三赶尸艳谈| 日韩精品在线网站| 一区二区国产精品精华液| 蜜桃视频在线观看一区二区| 日本欧美色综合网站免费| 国产在线观看www| 精品国产3级a| 日韩三级视频在线播放| 懂色av一区二区三区免费观看| 黄色a级在线观看| 国产91欧美| 日韩在线视频观看| 中文字幕在线观看精品| 亚洲国产精品av| 污片在线免费看| 久久综合成人| 成人国产在线视频| 国产精品剧情| 日韩精品一区二区三区四区视频| 青青草原在线免费观看| 国产成人aaa| 男人添女人荫蒂免费视频| av毛片精品| 国产91精品久久久久久| 毛片在线能看| 欧美日韩精品一二三区| 91狠狠综合久久久| 国产麻豆91精品| av 日韩 人妻 黑人 综合 无码| 国产视频一区二| 欧美激情xxxx性bbbb| 日本高清视频在线| 日韩欧美一区二区三区| 91成人在线免费视频| 蜜桃91丨九色丨蝌蚪91桃色| 一区二区三视频| 亚洲精品高潮| 欧美专区中文字幕| 岛国最新视频免费在线观看| 91精品国产欧美日韩| 久久亚洲精品大全| 26uuu国产电影一区二区| 亚洲人成无码www久久久| 久久精品国产大片免费观看| 亚洲一区制服诱惑| 国产色播av在线| 亚洲视频综合网| 国产精品自拍电影| 亚洲成人福利片| 国产一二三四区在线| 国产精品一区三区| 免费在线观看毛片网站| 日韩综合一区| 好看的日韩精品| 欧美亚洲二区| 2020久久国产精品| 欧美精品电影| 日韩精品在线视频| 国产免费久久久| 欧美性xxxxxx| 欧美成人精品激情在线视频| www激情久久| 黄色片免费网址| 米奇777在线欧美播放| 中文字幕免费高| 伊人春色之综合网| 91在线免费看网站| 国产亚洲一区二区手机在线观看| 久久国产精品久久久| 九九热视频在线观看| 日韩亚洲欧美成人一区| 亚洲色成人www永久网站| 亚洲精品伦理在线| 日韩中文字幕有码| aaa亚洲精品| 国产女同无遮挡互慰高潮91| 性8sex亚洲区入口| 成人毛片100部免费看| 国产一区二区三区探花| 99国产视频在线| 日本成人一区二区| 国产盗摄xxxx视频xxx69| 国产一线二线在线观看| www.亚洲一区| 91伦理视频在线观看| 国产视频一区在线| 黄色片一区二区三区| 欧美精品 日韩| 欧美一级做a爰片免费视频| 午夜电影网一区| 久久精品国产亚洲av高清色欲 | 国产精品欧美一区二区三区不卡| 国产成人精品最新| 中文字幕在线中文字幕在线中三区| 超碰精品一区二区三区乱码| 91社区在线观看| 一区二区欧美亚洲| 男男激情在线| 国产婷婷色综合av蜜臀av| 国产91久久久| 精品国产免费一区二区三区四区| 国产欧美综合视频| 欧美精品777| 一级做a爱片久久毛片| 欧美日韩一区二区电影| 黄色av一区二区| 在线中文字幕一区二区| 9i精品福利一区二区三区| 欧美日韩免费观看中文| 欧美日韩一二三四区| 狠狠色香婷婷久久亚洲精品| 国产微拍精品一区| 婷婷国产v国产偷v亚洲高清| 欧美三日本三级少妇99| 精品毛片三在线观看| av资源免费观看| 欧美日韩中文字幕| 天堂网免费视频| 在线观看视频一区| 黄色污污视频软件| 欧美午夜宅男影院| 在线免费观看av片| 欧美一区二区三级| 亚洲国产精品无码久久| 337p日本欧洲亚洲大胆精品| 天天综合网在线观看| 亚洲精品一二区| 国产三级视频在线| 视频在线观看一区二区| 成人影院在线观看| 欧美激情精品在线| 妞干网免费在线视频| 国产成人精品久久亚洲高清不卡| 日本在线中文字幕一区二区三区| 国产日韩精品一区二区| 玖玖玖电影综合影院| 国产精品制服诱惑| 亚洲伊人春色| 一本一生久久a久久精品综合蜜 | 亚洲成熟丰满熟妇高潮xxxxx| 秋霞电影一区二区| 在线免费观看av网| 成人国产电影网| 久久亚洲无码视频| 亚洲欧美激情小说另类| 日本视频免费在线| 欧美日韩一区二区三区视频| 午夜精品在线播放| 亚洲摸下面视频| 看女生喷水的网站在线观看| 久久久久久久久久久亚洲| 美女100%一区| 亚洲精品日韩av| 亚洲制服欧美另类| 欧美爱爱视频网站| 国产农村妇女精品一区二区| 亚洲另类第一页| yourporn久久国产精品| 又色又爽的视频| 香蕉av福利精品导航| 一区二区视频播放| 亚洲国产高清高潮精品美女| 最新国产在线观看| 性视频1819p久久| 高清一区二区三区av| 久久大香伊蕉在人线观看热2| 五月综合激情| 欧美性大战久久久久xxx| 国产真实乱子伦精品视频| 青青草视频成人| 一区二区三区四区不卡在线| 中文字幕在线观看视频免费| 日韩免费在线观看| 在线免费黄色| 欧美中文字幕精品| 97久久精品| 中文字幕一区二区三区5566| 香蕉久久国产| 亚洲av成人精品一区二区三区| 成人欧美一区二区三区视频网页 | 久久综合导航| 日本一区二区免费视频| 国产精品成人网| 日韩精品一区二区亚洲av观看| 精品国产百合女同互慰| 麻豆网站在线免费观看| 国产精品第三页| 亚洲日本三级| 黄色动漫在线免费看| 粉嫩av一区二区三区粉嫩| 日韩高清dvd碟片| 欧美日韩国产高清一区| 风间由美一区| 国产成人福利网站| 最新亚洲精品| 国产一区二区在线视频播放| 丰满岳乱妇一区二区三区| 成人性生活毛片| 欧美精品1区2区| 麻豆91在线| 成人久久一区二区三区| 图片小说视频色综合| 91女神在线观看| 国产精品亲子伦对白| 精品国产乱子伦| 亚洲小视频在线观看| 久久野战av| 日韩欧美一区二区在线观看| 老牛影视一区二区三区| 在线免费观看麻豆| 在线免费亚洲电影| 国产福利小视频在线观看| 国产精品久久久久7777婷婷| 成人激情开心网| 91小视频网站| 亚洲特黄一级片| 国产高清精品软件丝瓜软件| 久久不射热爱视频精品| 日韩在线精品强乱中文字幕| 艳母动漫在线观看| 国产成人午夜精品影院观看视频| www.色小姐com| 亚洲精品www久久久久久广东| 国产直播在线| 日本午夜精品电影| 麻豆精品新av中文字幕| 一区二区国产精品精华液| 欧美v日韩v国产v| www.成人影院| 一区二区在线观看网站| 国产福利精品导航| 日本黄色片视频| 伊人激情综合网| 久久的色偷偷| 国产高清精品在线观看| 国产清纯白嫩初高生在线观看91 | 自拍偷自拍亚洲精品播放| 国产后入清纯学生妹| 97成人精品区在线播放| 精品久久久久中文字幕小说| 久久精品久久99| 午夜亚洲福利老司机| 成人在线免费公开观看视频| 国产在线不卡精品| 激情欧美国产欧美| 成人免费网站黄| 制服丝袜av成人在线看| aa国产成人| 在线成人性视频| 成人午夜激情在线| 免费黄色小视频在线观看| 久久久成人精品视频| 欧美美女啪啪| 在线观看免费av网址| 婷婷综合在线观看| 色的视频在线免费看| 国产尤物99| 精品一区二区三区在线观看国产 | 欧美日韩精品一二三区| 黑人玩欧美人三根一起进| 色狠狠久久av五月综合| 国产精品亚洲一区二区三区妖精| 黄色在线观看国产| 久久的精品视频| 国产麻豆精品久久| 野战少妇38p| 欧美久久久影院| 都市激情综合|