使用 Bulk Copy 将大量数据复制到数据库_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

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

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:复制数据库数据大量
黑客防线网安网讯:  如果一次要向数据库服务器提交多条记录 , 通常会执行多次Insert命令 , 这样就为要插入的每个记录执行一次与数据库服务器的往返, 这就给服务器增加了压力, 效率也大大的降低了...  .Ne...

  如果一次要向数据库服务器提交多条记录 , 通常会执行多次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 />" );
    }

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-10506-1.html
网站维护教程更新时间:2012-03-21 03:05:13  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer