SqlBulkCopy主要功能是把其他数据源(数据行DataRow,数据表DataTable)的数据有效批量的导入到SQL Server或其他数据库表中的功能。SqlBulkCopy在应用到大批量数据的插入时很方便。
/// <summary>
/// 大批量插入数据 速度非常可与
/// </summary>
/// <param name="connString">数据库链接字符串</param>
/// <param name="tableName">数据库表名</param>
/// <param name="dt">DataTable</param>
public static void BulkCopy(string connString, string tableName, DataTable dt)
{
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlTransaction transaction = conn.BeginTransaction())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.BatchSize = 2000;
bulkCopy.BulkCopyTimeout = 300;
bulkCopy.DestinationTableName = tableName;
try
{
foreach (DataColumn col in dt.Columns)
{
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
}
bulkCopy.WriteToServer(dt);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
finally
{
conn.Close();
}
}
}
}
}
也可以这么写
/// <summary>
/// 大批量插入数据 速度非常可与
/// </summary>
/// <param name="connString">数据库链接字符串</param>
/// <param name="tableName">数据库表名</param>
/// <param name="dt">DataTable</param>
public static void BulkCopy(string connString, string tableName, DataTable dt)
{
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlTransaction transaction = conn.BeginTransaction())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.BatchSize = 2000;
bulkCopy.BulkCopyTimeout = 300;
bulkCopy.DestinationTableNam