摘要:(簡單範例)用SqlBulkCopy大量寫入資料庫結合交易
這幾天在案子在寫這東西..發現..一點都不難..一點點程式就寫完了..
大家看圖說故事..這樣比較快..^^..
名字dbo.test資料庫
.aspx頁面..就放兩個button..有各自的事件
<body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="大量寫入" onclick="Button1_Click" /> <asp:Button ID="Button2" runat="server" Text="刪除" onclick="Button2_Click" /> </div> </form> </body>
.cs簡單的說就是先產生一個datatable..把你要寫入資料庫的東西..先寫在datatable
然後在一次大量寫入資料庫..原理很簡單..
然後在一次大量寫入資料庫..原理很簡單..
using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient; using System.Transactions; public partial class test_sqlBulkCopy : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { //產生source table DataTable sourceDt = new DataTable(); sourceDt.Columns.Add("id", typeof(int)); sourceDt.Columns.Add("a", typeof(string)); sourceDt.Columns.Add("b", typeof(string)); sourceDt.Columns.Add("c", typeof(string)); //看你要產生幾筆row先寫在datatable for (int i = 0; i < 10; i++) { DataRow dr = sourceDt.NewRow(); dr["a"] = "a" + i.ToString(); dr["b"] = "b" + i.ToString(); dr["c"] = "c" + i.ToString(); sourceDt.Rows.Add(dr); } //加入2.0以後的交易,記得匯入System.Transactions.dll using (TransactionScope myScope = new TransactionScope()) { //大量寫入 using (SqlConnection myConn = new SqlConnection(ConfigurationManager. ConnectionStrings["NORTHWNDConnectionString"].ConnectionString)) { myConn.Open(); using (SqlBulkCopy mySbc = new SqlBulkCopy(myConn)) { //設定 mySbc.BatchSize = 1000; mySbc.BulkCopyTimeout = 60; //處理完後丟出一個事件,或是說處理幾筆後就丟出事件 mySbc.NotifyAfter = sourceDt.Rows.Count; mySbc.SqlRowsCopied += new SqlRowsCopiedEventHandler(mySbc_SqlRowsCopied); //更新哪個資料庫 mySbc.DestinationTableName = "dbo.test"; //column對應 mySbc.ColumnMappings.Add("id", "id"); mySbc.ColumnMappings.Add("a", "a"); mySbc.ColumnMappings.Add("b", "b"); mySbc.ColumnMappings.Add("c", "c"); //寫入 mySbc.WriteToServer(sourceDt); //throw new Exception("error"); //完成交易 myScope.Complete(); } } } } void mySbc_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e) { ClientScript.RegisterStartupScript(GetType(), "test", "alert('完成');", true); } protected void Button2_Click(object sender, EventArgs e) { //刪除測試資料 linqToSqlDataContext db = new linqToSqlDataContext(); db.ExecuteCommand("DELETE FROM test"); ClientScript.RegisterStartupScript(GetType(), "test", "alert('完成');", true); } }
這樣就完成了..順便說一下..2.0的交易真的超簡單的..包住..就給可以跑..哈哈..
大家參考一下..有問題說ㄅ..
參考: