SqlServer SqlBulkCopy批量插入 -- 多張表同時插入(事務)

  這段時間在解決一個多個表需要同時插入大量數據的問題,于是在網上找了下,查到說用SqlBulkCopy效率很高,實驗后確實很快,10萬條數據只要4秒鐘,用ef要用40秒。但是我的還需兩張表同時插入,且需要用到事務,即有一個失敗,全部Rollback,廢話不多說,直接上代碼吧,下面是用C#語言編寫的。

  測試代碼:這是一個簡單的控制臺程序,相信你們都看得懂就不多說了

namespace ConsoleApp12
{class Program{static void Main(string[] args){DataTable dt = new DataTable();dt.Columns.Add("part", typeof(System.String));dt.Columns.Add("name", typeof(System.String));for (int i = 0; i < 20; i++){DataRow dr = dt.NewRow();dr[0] = "餐飲部";dr[1] = "" + i.ToString();dt.Rows.Add(dr);}DataTable dt2 = new DataTable();dt2.Columns.Add("parts", typeof(System.String));dt2.Columns.Add("names", typeof(System.String));for (int i = 0; i < 20; i++){DataRow dr2 = dt2.NewRow();dr2[0] = "2餐飲部";dr2[1] = "2店" + i.ToString();dt2.Rows.Add(dr2);}string connectionString = "server =.; uid = sa; pwd =123456;database=Test";all.ExecuteSqlTran1(connectionString, "test11", dt, "test12", dt2);}}
}

?

  數據庫幫助類:主要是這部分,網上是也有寫,但是多數含糊而過,并沒有給出具體代碼,小弟不才,在這里補全了,希望可以幫助到其他的新手。

        /// <summary>/// 多個數據庫表同時插入大量數據,并實現數據庫事務。/// </summary>/// <param name="SQLStringList">多條SQL語句</param>        public static int ExecuteSqlTran1(string connectionString, string TableName1, DataTable dt1, string TableName2, DataTable dt2){using (SqlConnection conn = new SqlConnection(connectionString)){conn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;SqlTransaction tx = conn.BeginTransaction();cmd.Transaction = tx;try{int count = 1;using (SqlBulkCopy sqlBC1 = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, tx)){sqlBC1.DestinationTableName = TableName1;//***代表要插入數據的表名foreach (DataColumn dc in dt1.Columns)  //傳入上述table
                        {sqlBC1.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);//將table中的列與數據庫表這的列一一對應
                        }sqlBC1.WriteToServer(dt1);}using (SqlBulkCopy sqlBC2 = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, tx)){sqlBC2.DestinationTableName = TableName2;//***代表要插入數據的表名foreach (DataColumn dc in dt2.Columns)  //傳入上述table
                        {sqlBC2.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);//將table中的列與數據庫表這的列一一對應
                        }sqlBC2.WriteToServer(dt2);}tx.Commit();return count;}catch(Exception ex){var error = ex.ToString();tx.Rollback();return 0;}}}

?

結果在數據庫中已經將dt中內容插入了兩遍,實現了向兩張表同時插入數據,另外,相信大家有耐心看到這的話,3個表同時插入,4個表同時插入也都會了,希望能幫助到大家。

?

小弟不才,有問題請隨時聯系我,一起長進知識。

qq:188261629

?

轉載于:https://www.cnblogs.com/peng0731/p/9110735.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251666.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251666.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251666.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一介書生,僅此而已

喜歡寫文章&#xff0c;所以很少發隨筆。 嘛~其實是一開始就搞錯隨筆和文章的場景了&#xff0c;遷移太麻煩&#xff0c;有時間自己做個個人博客好了~~轉載于:https://www.cnblogs.com/restartyang/p/7710907.html

POJ 3608 Bridge Across Islands 《挑戰程序設計競賽》

為什么80%的碼農都做不了架構師&#xff1f;>>> POJ 3608 Bridge Across Islands跨島大橋&#xff1a;在兩個凸包小島之間造橋&#xff0c;求最小距離&#xff1f;3.6與平面和空間打交道的計算幾何 凸包 這題原始數據已經是凸包&#xff08;convex polygons&#x…

抓包(Charles工具入門)

一、charles工具簡單使用 1、錄制操作 錄制請求、清空錄制請求&#xff1a; 兩種展示請求的視圖方式&#xff1a; 2、錄制請求的簡單分析 &#xff08;1&#xff09;請求的總覽頁面Overview&#xff1a;可查看請求路徑、請求方式、請求時間等有關該請求的內容 &#xff08;2&am…

探秘創造力

為什么80%的碼農都做不了架構師&#xff1f;>>> 創造力&#xff0c;在很多行業和領域都被視為神奇的存在&#xff0c;大家都希望自己的創造力能夠無限&#xff0c;感覺創造力已經被神話了。其實&#xff0c;一個簡單問題可能很少人能夠明確&#xff1a;”創造力是天…

2017.10.23解題報告

預計分數&#xff1a;100600160 實際分數&#xff1a;100800180 T1 題目描述 現在有一個字符串&#xff0c;每個字母出現的次數均為偶數。接下來我們把第一次出現的字母a和第二次出現的a連一條線&#xff0c;第三次出現的和四次出現的字母a連一條線&#xff0c;第五次出現的和六…

Chrome Android 60.X+ 不能自動播放audio音頻的解決辦法

Chrome Android等一些瀏覽器默認限制了自動播放音頻視頻等&#xff0c;需要用戶有點擊的動作后才可以播放。這樣的原因在于很多用戶流量需要付費&#xff0c;而限制了自動播放可以避免用戶在不知情的情況下產生高額的流量費用。 在60.X版本之前&#xff0c;chrome://flags中有一…

(水一下)Linux啟動步驟(面試題)

1.加載并初始化Linux內核2.配置硬件設備3.內核創建自發進程4.由用戶決定是否進入手工引導模式5.init進程執行系統啟動腳本6.進入多用戶模式轉載于:https://blog.51cto.com/12942223/2408649

【WebGL】《WebGL編程指南》讀書筆記——第5章

一、前言 終于到了第五章了&#xff0c;貌似開始越來越復雜了。 二、正文 Example1&#xff1a;使用一個緩沖區去賦值多個頂點數據&#xff08;包含坐標及點大小&#xff09; function initVertexBuffers(gl) {var verticesSizes new Float32Array([0.0, 0.5, 10.0, -0.5, …

ngnix反向代理

https://blog.csdn.net/sherry_chan/article/details/79055211轉載于:https://www.cnblogs.com/lwj820876312/p/9115308.html

框架設計:實現數據的按需更新與插入的改進--用數據對比進一步說明

2019獨角獸企業重金招聘Python工程師標準>>> 在發布完&#xff1a;框架設計&#xff1a;實現數據的按需更新與插入的改進 之后&#xff1a; 有網友表示不理解&#xff0c;于是這里給出一篇簡單的說明對比&#xff0c;表示下改進后好處。 一&#xff1a;場景一&#…

Java異常詳解及如何處理

來源&#xff1a;Java異常詳解及如何處理 簡介 程序運行時&#xff0c;發生的不被期望的事件&#xff0c;它阻止了程序按照程序員的預期正常執行&#xff0c;這就是異常。異常發生時&#xff0c;是任程序自生自滅&#xff0c;立刻退出終止&#xff0c;還是輸出錯誤給用戶&…

端口以及服務常用cmd

netstat -ano 列出所有端口的情況 netstat -aon|findstr "49157" 查出特定端口的情況 tasklist|findstr "2720" 查看是哪個進程或者程序占用了PID端口的程序 打開任務管理器&#xff0c;切換到進程選項卡&#xff…

python學習筆記(二十八)日志模塊

我們在寫程序的時候經常會打一些日志來幫助我們查找問題&#xff0c;這次學習一下logging模塊&#xff0c;在python里面如何操作日志。介紹一下logging模塊&#xff0c;logging模塊就是python里面用來操作日志的模塊&#xff0c;logging模塊中主要有4個類&#xff0c;分別負責不…

TransactionScope 的基本原理簡介

C# 的事務編程 1 Db事務 DbConnection 中創建基于當前連接的 DbTransaction 2 使用TransactionScope ,創建環境事務 一旦創建&#xff0c;在這個環境包含的DbConnection 實例 都會根據連接字符串中的 Sqlserver 連接字符串支持&#xff0c;是否自動附加當前環境事務. 連接字符…

Canvas 生成交互動畫

2019獨角獸企業重金招聘Python工程師標準>>> 今天介紹的是一個HTML5交互動畫效果&#xff0c;難以置信。HTML5雖說還有很多東西在改進&#xff0c;但現在所能實現的 效果的程度我想是諸位很難想象得到的&#xff0c;實在是發展得太快了。 查看詳情 轉載于:https://m…

Spark記錄-Scala數據類型

Scala與Java具有相同的數據類型&#xff0c;具有相同的內存占用和精度。以下是提供Scala中可用的所有數據類型的詳細信息的表格&#xff1a; 序號數據類型說明1Byte8位有符號值&#xff0c;范圍從-128至1272Short16位有符號值&#xff0c;范圍從-32768至327673Int32位有符號值&…

二分搜索技術

2019獨角獸企業重金招聘Python工程師標準>>> 分治法的基本思想&#xff1a;將一個規模為n的問題&#xff0c;分解為k個規模較小的子問題&#xff0c;這些子問題互相獨立且與原問題相同。遞歸的解這些子問題&#xff0c;然后將各個子問題的解合并得到原問題的解。 經…

數據庫連接情況查詢

--sp_who 可以指定數據庫名&#xff0c;查詢指定數據庫的連接情況 sp_who go select DB_NAME(database_id) dbname, login_name, t1.session_id, t1.request_id, t2.status, t1.start_time, host_name from sys.dm_exec_requests t1inner join sys.dm_exec_sessions t2 on…

apachacxf項目使用@WebService報錯

首先去除已經導入的包那是因為我們要導入javaee的api,首先點擊最下面這個選擇自己電腦上的路徑然后就會自動導入上面的包,同時在jar庫上也會出現轉載于:https://www.cnblogs.com/fengnan/p/9311949.html

windows下redis 開機自啟動

1&#xff0c;在redis的目錄下執行&#xff08;執行后就作為windows服務了&#xff09;redis-server --service-install redis.windows.conf 2&#xff0c;安裝好后需要手動啟動redisredis-server --service-start 3&#xff0c;停止服務redis-server --service-stop 4&#xf…