C#批量更新数据表

ADO.Net2.0中提供了SqlBulkCopy类
SqlBulkCopy 类
• DestinationTableName:目标数据库的表名
• BulkCopyTimeout:指定操作完成的Timeout时间
• NotifyAfter:指定通知通知事件前处理的数据行数
• WriteToServer方法:将数据源拷备到目标数据库
• SqlBulkCopy DesBulkOp = new
SqlBulkCopy(DesConString,
SqlBulkCopyOptions.UseInternalTransaction);
– 指定了目标数据库,使用
SqlBulkCopyOptions.UseInternalTransaction是指迁移动作指定
在一个Transaction当中,如果数据迁移中产生错误或异常将发生
回滚。
• 使用SqlBulkCopy 类只能向SQL Server 表写入数据。但
是,数据源不限于SQL Server;可以使用任何数据源,
只要数据可加载到DataTable 实例或可使用IDataReader
实例读取数据。

 

C# code
   
   
   
   
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.Configuration; namespace Demo17 { public partial class Form1 : Form { DateTime startTime; public Form1() { InitializeComponent(); } private void btnTest_Click( object sender, EventArgs e) { startTime = DateTime.Now; string SrcConString; string DesConString; SqlConnection SrcCon = new SqlConnection(); SqlConnection DesCon = new SqlConnection(); SqlCommand SrcCom = new SqlCommand(); SqlDataAdapter SrcAdapter = new SqlDataAdapter(); DataTable dt = new DataTable(); SrcConString = ConfigurationManager.ConnectionStrings[ " SrcDBConnectionString " ].ConnectionString; DesConString = ConfigurationManager.ConnectionStrings[ " DesDBConnectionString " ].ConnectionString; SrcCon.ConnectionString = SrcConString; SrcCom.Connection = SrcCon; SrcCom.CommandText = " SELECT * From Production.Product " ; SrcCom.CommandType = CommandType.Text; SrcCom.Connection.Open(); SrcAdapter.SelectCommand = SrcCom; SrcAdapter.Fill(dt); SqlBulkCopy DesBulkOp; DesBulkOp = new SqlBulkCopy(DesConString, SqlBulkCopyOptions.UseInternalTransaction); DesBulkOp.BulkCopyTimeout = 500000000 ; DesBulkOp.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnRowsCopied); DesBulkOp.NotifyAfter = dt.Rows.Count; // DesBulkOp.ColumnMappings.Add("SrcCol", "DesCol"); try { DesBulkOp.DestinationTableName = " Product " ; DesBulkOp.WriteToServer(dt); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SrcCon.Close(); DesCon.Close(); } } private void OnRowsCopied( object sender, SqlRowsCopiedEventArgs args) { lblCounter.Text += args.RowsCopied.ToString() + " rows are copied/r/n " ; TimeSpan copyTime = DateTime.Now - startTime; lblCounter.Text += " Copy Time: " + copyTime.Seconds.ToString() + " . " + copyTime.Milliseconds.ToString() + " seconds " ; } } }

你可能感兴趣的:(数据库,exception,object,String,C#,sqlserver)