`

使用 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为:
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. **创建目标数据库表结构** 在目标数据库中,...

    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