📄 bulkcopy.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
public class BulkCopy
{
//禁止类进行实例化
private BulkCopy()
{
}
/// <summary>
/// 将一实例中的一个源表复制到另一个实例中的目的表,属于非事务方式进行,无法回滚;
/// 如果源表和目标表处于同一个 SQL Server 实例中,请不要用次方法,应使用 Transact-SQL INSERT … SELECT 语句复制数据会更加容易、
/// 更加迅速
/// </summary>
/// <param name="connSourceStr">源数据库的连接字符串</param>
/// <param name="connDestinationStr">目的数据库的连接字符串</param>
/// <param name="cmdText">对源数据库的选择操作命令</param>
/// <param name="DestinationTableName">目的数据库的表名称</param>
public static void SingleCopy(string sourceString, string destinationString, string cmdText, string destTableName, int batchSize)
{
using (SqlConnection connSource = new SqlConnection(sourceString), connDest = new SqlConnection(destinationString))
{
SqlCommand cmd = new SqlCommand(cmdText, connSource);
try
{
if (connSource.State != ConnectionState.Open)
connSource.Open();
SqlDataReader reader = cmd.ExecuteReader();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connDest))
{
bulkCopy.DestinationTableName = destTableName;
bulkCopy.BatchSize = batchSize;
if (connDest.State != ConnectionState.Open)
connDest.Open();
bulkCopy.WriteToServer(reader);
bulkCopy.Close();
connDest.Close();
}
}
catch (SqlException ex)
{
throw ex;
}
}
}
/// <summary>
/// 将一实例中的一个源表复制到另一个实例中的目的表,按照事务方式进行
/// 由于不同批次在不同事务中执行,因此,如果在批量复制操作期间发生错误,则当前批次中的所有行都将被回滚,但以前批次中的行将保留在数据库中
/// </summary>
/// <param name="sourceString"></param>
/// <param name="destinationString"></param>
/// <param name="cmdText"></param>
/// <param name="destTableName"></param>
/// <param name="batchSize"></param>
public static void TransCopy(string sourceString, string destString, string cmdText, string destTableName, int batchSize)
{
using (SqlConnection connSource = new SqlConnection(sourceString))
{
SqlCommand cmd = new SqlCommand(cmdText, connSource);
try
{
if (connSource.State != ConnectionState.Open)
{
connSource.Open();
}
SqlDataReader reader = cmd.ExecuteReader();
using (SqlConnection connDest = new SqlConnection(destString))
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction))
{
bulkCopy.DestinationTableName = destTableName;
bulkCopy.BatchSize = batchSize;
if (connDest.State != ConnectionState.Open)
connDest.Open();
bulkCopy.WriteToServer(reader);
bulkCopy.Close();
}
}
}
catch (SqlException ex)
{
throw ex;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -