您的位置:首页 > 数据库 > SQL

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) 创建新的列映射,并使用列名称引用源列和目标列。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: