ADO.NET数据批量拷贝
2008-06-22 19:54
351 查看
SqlBulkCopy类提供批量数据的操作
两张表的结构必须相同,目标必须是MSSql,数据源可以任意。超大量数据可以分批拷贝。1.先在一张表中插入万数量级数据,经过测试,每次插入的用时都不同,可能受到机器的运行程序的数量的影响。
基本上都是插入10万条数据用时40多秒到50多秒。
2.把插入的数据从数据库中读出来放到一个DataTable中,
con1 = new SqlConnection(strCon1);
cmd = new SqlCommand("select * from tbl_Copy", con1);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adp.Fill(dt);
SqlBulkCopy LargeCopy ;
LargeCopy = new SqlBulkCopy(strCon2,//要拷贝的数据库连接
SqlBulkCopyOptions.UseInternalTransaction//每一批批量复制操作将在事务中发生。出错会回滚。不过我没验证^-^.
);
LargeCopy.BulkCopyTimeout = 100000;//超时之前操作完成所允许的秒数。如果操作超时,事务便不会提交,而且所有已复制的行都会从目标表中移除。
LargeCopy.SqlRowsCopied+=new SqlRowsCopiedEventHandler(LargeCopy_SqlRowsCopied);
//在每次处理完 NotifyAfter 属性指定的行数时发生。
LargeCopy.NotifyAfter = dt.Rows.Count;//定义在生成通知事件之前要处理的行数。
Application.DoEvents();
try
{
LargeCopy.DestinationTableName = "tbl_Copy";//服务器上目标表的名称。
LargeCopy.WriteToServer(dt);// 将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。
}
catch(Exception CopyErr)
{
}
3.公共事件
public void LargeCopy_SqlRowsCopied(object sender,SqlRowsCopiedEventArgs args)
{
label1.Text = args.RowsCopied.ToString()+" rows are copid。";
TimeSpan ss =DateTime.Now.Subtract(sTime);
label1.Text += "/n用时:"+ss.Milliseconds.ToString()+" 豪秒。";
}
相关文章推荐
- 批量导入数据(ADO.NET)
- ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据
- ADO.NET与SQL SERVER之向数据库中批量添加、修改数据
- SQL Server 中的批量复制操作 (ADO.NET)--sqlserver快速写入大数据
- Ado.net批量添加和更新数据简单示例
- 批量导入数据(ADO.NET)
- 用Ado.net可以对数据进行批量添加或更新
- 批量导入数据(ADO.NET)
- ADO.NET数据批量更新
- Ado.net批量添加和更新数据简单示例
- ADO.NET数据批量提交
- ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据
- ADO.NET之数据库表之间批量写入数据
- ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)
- 使用ADO.net将数据导出到Excel并提供下载
- ADO.NET实体数据模型中关于数据库字段默认值的处理
- ADO.NET 数据集中浏览多个相关表 3
- Synchronization Services for ADO.NET - 创建一个偶然连接数据库系统。(数据同步系统)
- 如何:使用 ADO.NET 实体框架数据源创建数据服务(WCF 数据服务)
- ADO.NET的数据提供程序和数据连接——ADO.NET学习&应用笔记之二