如果一次要向数据库服务器提交多条记录 , 通常会执行多次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 对象数组 .
分享到:
相关推荐
下面我们将详细讲解如何使用BCP进行数据复制。 首先,我们需要确保BCP工具已经安装并且在系统路径中可用。通常,当安装SQL Server时,BCP会自动包含在安装包内。 1. **创建目标数据库表结构** 在目标数据库中,...
它允许一次性将大量数据从DataTable或IDataReader对象复制到SQL Server表,大大提高了性能。使用时,首先创建SqlBulkCopy对象,设置目标表名,然后将数据源关联到WriteToServer方法,最后执行插入操作。 3. **表...
当涉及到将大量数据导入SQL服务器时,正确的方法和技术选择至关重要。本文将深入探讨如何高效地将海量数据导入到SQL中,主要关注的技术包括BCP工具、BULK INSERT语句及其具体应用实践。 ### 一、BCP工具:批量复制...
首先,SqlBulkCopy类位于`System.Data.SqlClient`命名空间下,通过创建SqlBulkCopy对象并与目标数据库建立连接,可以快速地将大量数据从一个数据源(如DataTable或IDataReader)复制到目标表。其优点在于,相比于...
`SqlBulkCopy`是一种用于高效将大量数据复制到SQL Server数据库表中的工具。相比于传统的逐条插入方式,`SqlBulkCopy`能显著提高数据导入的速度。其核心原理是利用了SQL Server内部的BCP(Bulk Copy Program)协议,...
例如,你可以使用`bulk_copy_from_file()`方法将CSV文件中的数据快速导入到数据库,或者使用`bulk_copy_to_file()`方法将数据库表中的数据导出到CSV文件。这两个方法都极大地提升了数据处理的速度,尤其适合大数据量...
从给定的信息来看,主要涉及的是使用SQL Server的批处理工具BCP(Bulk Copy Program)来从数据库中导出表并生成dbf文件的过程。下面将详细介绍这一过程及相关知识点。 ### BCP工具简介 BCP是SQL Server提供的一款...
**:介绍了如何使用BULK INSERT命令将大量数据快速导入SQL Server。 #### 专家建议 在进行数据导入导出操作时,听取专家的意见可以避免许多常见错误,并提高工作效率。以下是一些专家的建议: - 在执行大型数据...
BCP是Microsoft SQL Server提供的一种实用程序,允许用户将大量数据从数据库复制到文本文件,或者从文本文件复制到数据库,而无需通过SQL Server的联机接口。 描述中提到的“SQL2000下的BCP”是指BCP在SQL Server ...
BCP(Bulk Copy Program)是一种高效的数据导入导出工具,尤其适合大量数据的快速迁移。它可以在命令行环境下运行,支持并行操作,从而提高数据装载速度。然而,BCP的使用相对复杂,需要编写格式文件来定义数据布局...
bcp命令,即bulk copy program,是一个命令提示符下的工具,允许用户以指定的格式从操作系统文件中复制数据到SQL Server,或者反过来。它是一种批量数据操作的简便方法,适合进行大量数据的导入导出操作。 textcopy...
数据库备份是将数据库中的数据复制到其他存储介质上的过程,目的是防止数据丢失或损坏,为恢复数据提供可能。常见的备份类型有完整备份、差异备份和事务日志备份。ASP.NET提供了多种方式来操作SQL Server数据库,如...
4. **采用BCP程序批量导出**:BCP(Bulk Copy Program)是Sybase提供的一个实用工具,能高效地批量导入或导出大量数据,是大规模数据迁移的首选方法。 【SYBASE IQ数据库迁移实例】 1. **环境及软件版本**:迁移前...
BCP(Bulk Copy Program)是一种快速高效的批量导入导出工具,主要适用于将大量数据从文件系统直接导入SQL Server数据库或反之。相比于其他数据移动方式,BCP具有速度快、占用资源少的特点。使用BCP进行数据移动时,...
SELECT INTO语句可以创建一个新的表,并将现有表的数据复制到新表中。如果新表位于不同的服务器或数据库,这也可以视为一种形式的数据导出。 6. **BCP (Bulk Copy Program)** BCP是SQL Server自带的命令行工具,...
并且,它不支持直接从一个数据库表复制到另一个,而是需要先将数据导出为文件,再由`pgcopy`导入。 总的来说,`pgcopy`是PostgreSQL用户和开发者的一个强大工具,它能显著提升大数据量导入的效率。通过Python接口,...
3. 使用bcp命令行工具:bcp(Bulk Copy Program)是一个命令行实用工具,允许用户批量导入或导出数据。该工具支持快速导入大量数据,特别是在数据量庞大且对格式要求不高的场景下非常有效。 4. T-SQL语句:利用T-...