如果一次要向数据库服务器提交多条记录 , 通常会执行多次Insert命令 , 这样就为要插入的每个记录执行一次与数据库服务器的往返 , 这就给服务器增加了压力 , 效率也大大的降低了...
.Net FrameWork 2.0 新增功能 Bulk Copy 可以很快将大量数据加载到数据库中 , 现在利用这一新功能来实现上述功能.
这里从 MS Sql Server 2000 的 NorthWind 的 Orders 表加载数据到 DateTable 模拟要向数据库服务器提交的多条记录集 . 用 Tempdb 库来模拟目标数据库服务器 .
先在 Tempdb 建一个表 temp_orders
USE TEMPDB
CREATE TABLE TEMP_ORDERS
(
TEMP_ORDERID INT,
TEMP_CUSTOMERID NCHAR(5),
TEMP_ORDERDATE DATETIME,
TEMP_SHIPNAME NVARCHAR(40)
)
下面为模拟程序
protected void Page_Load(object sender, EventArgs e)
{
#region 从NorthWind的Orders表获取要插入的数据
DataTable dtNorthWindOrders = new DataTable();
using ( SqlConnection northWindConnection = new SqlConnection( "Data Source=.;Initial Catalog=NorthWind;Integrated Security=True" ) )
{
using ( SqlDataAdapter northWindAdapter = new SqlDataAdapter( "SELECT ORDERID,CUSTOMERID,ORDERDATE,SHIPNAME FROM ORDERS" , northWindConnection ) )
{
northWindAdapter.Fill( dtNorthWindOrders );
}
}
#endregion
using ( SqlConnection tempdbConnection = new SqlConnection( "Data Source=.;Initial Catalog=Tempdb;Integrated Security=True" ) )
{
tempdbConnection.Open( );
using ( SqlTransaction tran = tempdbConnection.BeginTransaction( ) )
{
SqlBulkCopy bulkCopyOrders = new SqlBulkCopy( tempdbConnection , SqlBulkCopyOptions.Default , tran );
bulkCopyOrders.DestinationTableName = "TEMP_ORDERS";
//将数据源表字段和目标表的字段做个映射
bulkCopyOrders.ColumnMappings.Add( "ORDERID" , "TEMP_ORDERID" );
bulkCopyOrders.ColumnMappings.Add( "CUSTOMERID" , "TEMP_CUSTOMERID" );
bulkCopyOrders.ColumnMappings.Add( "ORDERDATE" , "TEMP_ORDERDATE" );
bulkCopyOrders.ColumnMappings.Add( "SHIPNAME" , "TEMP_SHIPNAME" );
bulkCopyOrders.BulkCopyTimeout = 1000;
//每处理10行触发一个事件向页面上输出一个消息
bulkCopyOrders.SqlRowsCopied += new SqlRowsCopiedEventHandler( onRowsCopy );
bulkCopyOrders.NotifyAfter = 10;
try
{
bulkCopyOrders.WriteToServer( dtNorthWindOrders );
tran.Commit( );
}
catch ( Exception ex )
{
Response.Write( ex.ToString( ) );
}
finally
{
dtNorthWindOrders = null;
}
}
}
}
private void onRowsCopy ( object Sender , SqlRowsCopiedEventArgs args )
{
Response.Write("已复制:<font color=red>"+ args.RowsCopied.ToString( ) + "</font><br />" );
}
通过SQL SERVER 事件探察器发现执行的SQL为:
insert bulk TEMP_ORDERS ([TEMP_ORDERID] Int, [TEMP_CUSTOMERID] NChar(5) COLLATE Chinese_PRC_CI_AS, [TEMP_ORDERDATE] DateTime, [TEMP_SHIPNAME] NVarChar(40) COLLATE Chinese_PRC_CI_AS)
通过运行程序可以看出这个速度是相当的快 , 使用这个方法的最大优点是 : 减少对数据库的访问次数 .
WriteToServer不仅可以处理 DataTable 对象 , 还可以处理 DataReader , DataRow 对象数组 .
分享到:
相关推荐
bulk insert导入数据,可以方便的将大数据量的数据快速导入
大阮量数据入库,可以采用bulk insert将文件应设到数据库,加快了入库的时间
可以方便的将外部数据批量导入、批量合并导入、批量更新导入、批量删除到Sqlserver数据库,基本支持Sqlserver最新的数据库,我用的是Sqlserver2008R2,一点问题没有。共享一下。 需要批量导入数据的同学们,这是福音...
4秒100万条数据导入SQL数据库-NET(C#)demo 试验的5种方法,比较各种方法的导入速度 基本Insert Into 单线程Bulk Insert 多线程Bulk Insert 单线程SqlBulkCopy 多线程SqlBulkCopy
最近跟客户做数据对接比较多,发现平常的添加到数据库数据太慢,所以也没少逛论坛。结合论坛上的资料封装出了一个MysqlBulkCopy。本压缩包内包含SqlBulkCopy.dll和MysqlBulkCopy.dll和其使用源码。源码批量添加到SQL...
Bulk Insert 批量操作数据库类,使用SqlBulkCopy将DataTable中的数据批量插入数据库中,若源数据集属性与目标表属性字段不一致可额外进行映射
数据插入数据库5种方式工具源码 功能描述: 基本Insert Into 单线程Bulk Insert 多线程Bulk Insert 单线程SqlBulkCopy 多线程SqlBulkCopy 试验的5种方法,比较各种方法的导入速度 要把导入的文件放在C盘如:c:\\20...
C# bulk copy 批量插入Sqlserver,目前项目正在使用,放心下载
适合迁移数据到pg使用 。PostgreSQL提供了一个copy命令的便利数据加载工具,copy命令源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载。pg_bulkload是一种用于PostgreSQL的高速数据...
Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server...
博客配套文件,详细演示了如何通过MR程序的方式bulkload数据到hbase,代码可直接用于生产环境。
pg_bulkload旨在将大量数据加载到数据库中。 您可以绕过PostgreSQL共享缓冲区将数据加载到表中。 pg_bulkload还具有一些ETL功能; 输入数据验证和数据转换。 ---------- pg_bulkload位于pgfoundry中,但是已经暂时...
有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候。 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Server确实有这个功能。 ...
快速将JSON格式的大量数据添加到您的MongoDB数据库 如何使用: 首先,将存储库克隆到新目录中: git clone https://github.com/drozdowo/bulk-json-to-mongodb.git然后,导航至该目录并运行: npm install安装依赖...
基于vs2015\SQL2008的环境,使用常规、bulk、表参等方式进行大批量往SQL server插入数据.
可以方便的将外部数据批量导入、批量合并导入、批量更新导入、批量删除到Sqlserver数据库,基本支持Sqlserver最新的数据库,我用的是Sqlserver2008R2,一点问题没有。共享一下。 需要批量导入数据的同学们,这是福音...
SqlBulk的封装,实现Datatable快速导入Sql数据库
可以方便的将外部数据批量导入、批量合并导入、批量更新导入、批量删除到Sqlserver数据库,基本支持Sqlserver最新的数据库,我用的是Sqlserver2008R2,开发环境vs2010,一点问题没有(这是最新版本,vs2013应该没有...