日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SqlServer SqlBulkCopy批量插入 -- 多张表同时插入(事务)

發布時間:2023/12/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的SqlServer SqlBulkCopy批量插入 -- 多张表同时插入(事务)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。