如果一次要向数据库服务器提交多条记录 , 通常会执行多次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为:
view plaincopy to clipboardprint?
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"><span style="COLOR: #000000">insert bulk TEMP_ORDERS ([TEMP_ORDERID] Int, [TEMP_CUSTOMERID] NChar(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">) COLLATE Chinese_PRC_CI_AS, [TEMP_ORDERDATE] DateTime, [TEMP_SHIPNAME] NVarChar(</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">) COLLATE Chinese_PRC_CI_AS)</span></div></div>
通过运行程序可以看出这个速度是相当的快 , 使用这个方法的最大优点是 : 减少对数据库的访问次数 .
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-...