例1:
connectionStr,鏈接字符串
dataTableName, 數據庫中對應表名
sourceDataTable DataTable 要寫入數據庫的DataTable
字段要和表一致
public static void SqlBulkCopyByDataTable(string connectionStr, string dataTableName, DataTable sourceDataTable, int batchSize = 100000)
{
using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionStr))
{
using (System.Data.SqlClient.SqlBulkCopy sqlBulkCopy = new System.Data.SqlClient.SqlBulkCopy(connectionStr,
System.Data.SqlClient.SqlBulkCopyOptions.UseInternalTransaction))
{
try
{
sqlBulkCopy.DestinationTableName = dataTableName;
sqlBulkCopy.BatchSize = batchSize;
for (int i = 0; i < sourceDataTable.Columns.Count; i++)
{
sqlBulkCopy.ColumnMappings.Add(sourceDataTable.Columns[i].ColumnName, sourceDataTable.Columns[i].ColumnName);
}
sqlBulkCopy.WriteToServer(sourceDataTable);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
例2:
- //省略連接字符串
- SqlConnection conn = new SqlConnection(".....");
- conn.Open();
- //初始化類
- using (System.Data.SqlClient.SqlBulkCopy sqlBC = new System.Data.SqlClient.SqlBulkCopy(conn))
- {
- //獲取需要導入的數據表
- DataTable dt = GetDataTable();
- //每10W條數據一個事物
- sqlBC.BatchSize = 100000;
- //超時時間
- sqlBC.BulkCopyTimeout = 60;
- //表名Users
- sqlBC.DestinationTableName = "dbo.Users";
- //字段對應,分表為原數據表字段名,和導入數據庫的字段名
- sqlBC.ColumnMappings.Add("Access_ID", "MSSQL_ID");
- sqlBC.ColumnMappings.Add("Access_Name", "MSSQL_Name");
- //sqlBC.ColumnMappings.Add("Access_...", "MSSQL_...");
- //sqlBC.ColumnMappings.Add("Access_...", "MSSQL_...");
- //導入到數據庫
- sqlBC.WriteToServer(dt);