新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 新疆二域软件开发公司 >> .Net技术 >> 文章正文

.Net FrameWork 2.0 新增功能 Bulk Copy

.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 对象数组 . 

作者:未知 | 文章来源:自学编程网 | 更新时间:2008-1-2 12:47:19

  • 上一篇文章:

  • 下一篇文章:

  • 相关文章:
    j2se 嵌入式脚本抓取引擎
    NET Framework 2.0 Service Pack 2下载地址
    解析.NET中的6各大的安全错误
    .NET中Boolean,bool以及String,string之间的区别
    在VC 程序中自定义Vista事件日志
    教程:.Net多线程和Windows Forms编程
    C++函数对象count_if
    语法C# 问关键字之:base、this
    C#中“+”的两种功能
    透过HTTP进行异步Web Service 呼叫
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·.net技术 asp.net MVC3 Vi
    ·.net将视频文件格式转换成
    ·NET Framework 2.0 Servic
    ·如何动态修改winform的app
    ·asp,net软件结构设计和相关
    ·学习怎样使用ASP.NET中的虚
    ·,net基础类的学习:system
    ·.net学习:c#事件的深入分
    ·Facade Pattern学习总结
    ·C#如何设置或者获取目录的
    ·如何使用XSL来定义ASP.NET
    ·理解WCF Data Contract契约
    ·如何能在.net2.0开发的控件
    ·模式怎样使用,讲解模式的
    ·如何解决Menu菜单被frame遮
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 新疆二域软件开发网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000