`
hrd888888
  • 浏览: 11982 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用 Bulk Copy 将大量数据复制到数据库

阅读更多
如果一次要向数据库服务器提交多条记录 , 通常会执行多次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. **创建目标数据库表结构** 在目标数据库中,...

    ADO.net大数据量操作数据库实验

    它允许一次性将大量数据从DataTable或IDataReader对象复制到SQL Server表,大大提高了性能。使用时,首先创建SqlBulkCopy对象,设置目标表名,然后将数据源关联到WriteToServer方法,最后执行插入操作。 3. **表...

    将海量数据导入到sql中

    当涉及到将大量数据导入SQL服务器时,正确的方法和技术选择至关重要。本文将深入探讨如何高效地将海量数据导入到SQL中,主要关注的技术包括BCP工具、BULK INSERT语句及其具体应用实践。 ### 一、BCP工具:批量复制...

    SqlBulkCopy批量插入数据(实例)

    首先,SqlBulkCopy类位于`System.Data.SqlClient`命名空间下,通过创建SqlBulkCopy对象并与目标数据库建立连接,可以快速地将大量数据从一个数据源(如DataTable或IDataReader)复制到目标表。其优点在于,相比于...

    SqlBulkCopy(批量复制)使用方法

    `SqlBulkCopy`是一种用于高效将大量数据复制到SQL Server数据库表中的工具。相比于传统的逐条插入方式,`SqlBulkCopy`能显著提高数据导入的速度。其核心原理是利用了SQL Server内部的BCP(Bulk Copy Program)协议,...

    PyPI 官网下载 | django-postgres-copy-2.0.2.tar.gz

    例如,你可以使用`bulk_copy_from_file()`方法将CSV文件中的数据快速导入到数据库,或者使用`bulk_copy_to_file()`方法将数据库表中的数据导出到CSV文件。这两个方法都极大地提升了数据处理的速度,尤其适合大数据量...

    从数据库中导出表生成dbf文件命令

    从给定的信息来看,主要涉及的是使用SQL Server的批处理工具BCP(Bulk Copy Program)来从数据库中导出表并生成dbf文件的过程。下面将详细介绍这一过程及相关知识点。 ### BCP工具简介 BCP是SQL Server提供的一款...

    SQL_Server数据库导入导出专家手册.pdf

    **:介绍了如何使用BULK INSERT命令将大量数据快速导入SQL Server。 #### 专家建议 在进行数据导入导出操作时,听取专家的意见可以避免许多常见错误,并提高工作效率。以下是一些专家的建议: - 在执行大型数据...

    可单独运行的BCP、SQL、大批量复制

    BCP是Microsoft SQL Server提供的一种实用程序,允许用户将大量数据从数据库复制到文本文件,或者从文本文件复制到数据库,而无需通过SQL Server的联机接口。 描述中提到的“SQL2000下的BCP”是指BCP在SQL Server ...

    SQL Server中导入导出数据三方法比较

    BCP(Bulk Copy Program)是一种高效的数据导入导出工具,尤其适合大量数据的快速迁移。它可以在命令行环境下运行,支持并行操作,从而提高数据装载速度。然而,BCP的使用相对复杂,需要编写格式文件来定义数据布局...

    浅谈如何使用SQL中的image和text数据.pdf

    bcp命令,即bulk copy program,是一个命令提示符下的工具,允许用户以指定的格式从操作系统文件中复制数据到SQL Server,或者反过来。它是一种批量数据操作的简便方法,适合进行大量数据的导入导出操作。 textcopy...

    利用asp。net远程数据库备份和还原

    数据库备份是将数据库中的数据复制到其他存储介质上的过程,目的是防止数据丢失或损坏,为恢复数据提供可能。常见的备份类型有完整备份、差异备份和事务日志备份。ASP.NET提供了多种方式来操作SQL Server数据库,如...

    sybaseiq数据库迁移实例.pdf

    4. **采用BCP程序批量导出**:BCP(Bulk Copy Program)是Sybase提供的一个实用工具,能高效地批量导入或导出大量数据,是大规模数据迁移的首选方法。 【SYBASE IQ数据库迁移实例】 1. **环境及软件版本**:迁移前...

    SQL server 六种数据移动方法

    BCP(Bulk Copy Program)是一种快速高效的批量导入导出工具,主要适用于将大量数据从文件系统直接导入SQL Server数据库或反之。相比于其他数据移动方式,BCP具有速度快、占用资源少的特点。使用BCP进行数据移动时,...

    sqlserver 数据导出语法工具

    SELECT INTO语句可以创建一个新的表,并将现有表的数据复制到新表中。如果新表位于不同的服务器或数据库,这也可以视为一种形式的数据导出。 6. **BCP (Bulk Copy Program)** BCP是SQL Server自带的命令行工具,...

    pgcopy:使用二进制副本快速加载数据

    并且,它不支持直接从一个数据库表复制到另一个,而是需要先将数据导出为文件,再由`pgcopy`导入。 总的来说,`pgcopy`是PostgreSQL用户和开发者的一个强大工具,它能显著提升大数据量导入的效率。通过Python接口,...

    来者不拒,大小通吃——谈SQL Server的数据导入.pdf

    3. 使用bcp命令行工具:bcp(Bulk Copy Program)是一个命令行实用工具,允许用户批量导入或导出数据。该工具支持快速导入大量数据,特别是在数据量庞大且对格式要求不高的场景下非常有效。 4. T-SQL语句:利用T-...

Global site tag (gtag.js) - Google Analytics