SqlBulkCopy数据批量处理
2013-11-21 15:25
232 查看
1.WriteToServer(DataTable)写入数据表
private void data_Copy_click(object sender, EventArgs e)
{
string strConnLocal = "server=.;UID=sa;PWD=sa;DATABASE=BEDCARD_HIS_DEMO";
string strConnRemote = " server=.;UID=sa;PWD=sa;DATABASE=bedcardSystem";
//获取源数据表中的数据
SqlConnection connlocal = new SqlConnection(strConnRemote);
connlocal.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT PAT_NUM,PAT_NAME,PAT_SEX,PAT_AGE,PAT_INTIME,PAT_BEDNO,PAT_WARDNUM,PAT_DIAGNOSIS,PAT_DOCTOR,PAT_TOTAL_FEE,PAT_TOTAL_PREPAID FROM BEDCARD_PAT_INFO WHERE PAT_WARDNUM='xxxxxx'";
cmd.Connection = connlocal;
SqlDataReader dr;
dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
try
{
dt.Load(dr);
}
catch (Exception ex)
{
}
//数据copy操作
//目标数据库
SqlConnection connremote = new SqlConnection(strConnLocal);
connremote.Open();
SqlTransaction sqltransaction = connremote.BeginTransaction();
//请在插入数据的同时检查约束,如果发生错误调用sqlbulkTransaction事务
SqlBulkCopy bulk = new SqlBulkCopy(connremote, SqlBulkCopyOptions.CheckConstraints, sqltransaction);
//设定每次操作的行数
bulk.BatchSize = 10;
//目标表名
bulk.DestinationTableName = "HIS_PAT_INFO";
try
{
//数据批量处理
bulk.WriteToServer(dt);
sqltransaction.Commit();
MessageBox.Show("插入成功");
}
catch (Exception ex)
{
sqltransaction.Rollback();
MessageBox.Show("操作失败" + "\n" + ex.ToString());
}
finally
{
dr.Close();
}
}
2.WriteToServer(DataReader)写入DataReader对象
bulk.writetoserver(reader);
源数据表中的数据 取出来放在一个reader中:
SqlDataReader reader = cmd.ExecuteReader();
数据插入的方法:
sqlbulkcopy.WriteToServer(reader);
3.WriteToServer(DataRow[])批次写入数据行
4.WriteToServer(DataTable,DataRowState)按行状态写入数据库表
使用SqlBulkCopy类进行数据插入其原理是采用了SQL Server的BCP协议进行数据的批量复制。先要建好一个DataTable(最好是通过DataAdapter来灌数据得到,因为这样出来的DataTable就已经有跟数据表相同的列定义,可以免去之后Mapping Column的步骤),把要插入的数据加进这个DataTable中,然后用SqlBulkCopy的实例来插入到数据库中。
sqlbulkcopy.columnappings.add()的有用连接地址:http://technet.microsoft.com/zh-cn/subscriptions/system.data.sqlclient.sqlbulkcopycolumnmapping
源列与目标列的数据类型不一致,可以使用构造函数自己转换
SqlBulkCopyColumnMapping() 用于初始化新的 SqlBulkCopyColumnMapping 对象的默认构造函数。
SqlBulkCopyColumnMapping(Int32, Int32) 创建新的列映射,并使用列序号引用源列和目标列。
SqlBulkCopyColumnMapping(Int32, String) 创建新的列映射,并使用列序号引用源列和目标列的列名称。
SqlBulkCopyColumnMapping(String, Int32) 创建新的列映射,并使用列名称引用源列和目标列的列序号。
SqlBulkCopyColumnMapping(String, String) 创建新的列映射,并使用列名称引用源列和目标列。
private void data_Copy_click(object sender, EventArgs e)
{
string strConnLocal = "server=.;UID=sa;PWD=sa;DATABASE=BEDCARD_HIS_DEMO";
string strConnRemote = " server=.;UID=sa;PWD=sa;DATABASE=bedcardSystem";
//获取源数据表中的数据
SqlConnection connlocal = new SqlConnection(strConnRemote);
connlocal.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT PAT_NUM,PAT_NAME,PAT_SEX,PAT_AGE,PAT_INTIME,PAT_BEDNO,PAT_WARDNUM,PAT_DIAGNOSIS,PAT_DOCTOR,PAT_TOTAL_FEE,PAT_TOTAL_PREPAID FROM BEDCARD_PAT_INFO WHERE PAT_WARDNUM='xxxxxx'";
cmd.Connection = connlocal;
SqlDataReader dr;
dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
try
{
dt.Load(dr);
}
catch (Exception ex)
{
}
//数据copy操作
//目标数据库
SqlConnection connremote = new SqlConnection(strConnLocal);
connremote.Open();
SqlTransaction sqltransaction = connremote.BeginTransaction();
//请在插入数据的同时检查约束,如果发生错误调用sqlbulkTransaction事务
SqlBulkCopy bulk = new SqlBulkCopy(connremote, SqlBulkCopyOptions.CheckConstraints, sqltransaction);
//设定每次操作的行数
bulk.BatchSize = 10;
//目标表名
bulk.DestinationTableName = "HIS_PAT_INFO";
try
{
//数据批量处理
bulk.WriteToServer(dt);
sqltransaction.Commit();
MessageBox.Show("插入成功");
}
catch (Exception ex)
{
sqltransaction.Rollback();
MessageBox.Show("操作失败" + "\n" + ex.ToString());
}
finally
{
dr.Close();
}
}
2.WriteToServer(DataReader)写入DataReader对象
bulk.writetoserver(reader);
源数据表中的数据 取出来放在一个reader中:
SqlDataReader reader = cmd.ExecuteReader();
数据插入的方法:
sqlbulkcopy.WriteToServer(reader);
3.WriteToServer(DataRow[])批次写入数据行
4.WriteToServer(DataTable,DataRowState)按行状态写入数据库表
使用SqlBulkCopy类进行数据插入其原理是采用了SQL Server的BCP协议进行数据的批量复制。先要建好一个DataTable(最好是通过DataAdapter来灌数据得到,因为这样出来的DataTable就已经有跟数据表相同的列定义,可以免去之后Mapping Column的步骤),把要插入的数据加进这个DataTable中,然后用SqlBulkCopy的实例来插入到数据库中。
sqlbulkcopy.columnappings.add()的有用连接地址:http://technet.microsoft.com/zh-cn/subscriptions/system.data.sqlclient.sqlbulkcopycolumnmapping
源列与目标列的数据类型不一致,可以使用构造函数自己转换
SqlBulkCopyColumnMapping() 用于初始化新的 SqlBulkCopyColumnMapping 对象的默认构造函数。
SqlBulkCopyColumnMapping(Int32, Int32) 创建新的列映射,并使用列序号引用源列和目标列。
SqlBulkCopyColumnMapping(Int32, String) 创建新的列映射,并使用列序号引用源列和目标列的列名称。
SqlBulkCopyColumnMapping(String, Int32) 创建新的列映射,并使用列名称引用源列和目标列的列序号。
SqlBulkCopyColumnMapping(String, String) 创建新的列映射,并使用列名称引用源列和目标列。
相关文章推荐
- 批量处理数据 SqlBulkCopy
- 使用SqlBulkCopy将DataTable中的数据批量插入数据库中
- C#中大批量导入数据SqlBulkCopy
- SqlBulkCopy从记事本批量复制数据4
- sqlbulkcopy 使用DataTable作为数据源的数据类型问题--来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier
- SqlBulkCopy 大数据拷贝
- 使用SqlBulkCopy将DataTable中的数据批量插入数据库中
- IBatis 批量插入数据之SqlBulkCopy
- [.net] 使用SqlBulkCopy提高导入数据的性能
- 关于批量导入数据类SqlBulkCopy 导入数据时增加额外的列
- sqlbulkcopy 批量插入数据
- C# 使用SqlBulkCopy,批量导入数据,并显示导入进度
- 使用事务和SqlBulkCopy导入大批量数据
- 使用SqlBulkCopy进行大批量数据迁移
- 批量插入数据 C# SqlBulkCopy使用
- SqlBulkCopy高效插入数据
- [转]利用SqlBulkCopy快速大批量导入数据(SqlBulkCopy强大)
- sqlserver大批量插入测试数据-sqlbulkcopy
- 使用SqlBulkCopy把DataTable里的数据插入数据表
- 使用SqlBulkCopy对象进行大容量复制数据出现Datardader已经存在的错误的解决方法