SQLBulkCopy使用

 

这两天在做一个可以转换数据库的小程序,用于将不同结构的两个数据库之间导数据。之前几乎从没有接触过数据库,只会一些简单的删除插入,这次面对复杂的,截然不同的表结构,一时间竟无从下手。百度谷歌都用上了,最后决定使用SQLBulkCopy类。

作为新人,面对一个从没有做过的Demo总是会有种种恐惧,生怕一不小心走了歪路。虽然从学习的角度来说,设计过程中走走歪路是有好处的。但是工作耽误不得,7天的开发时间是不容马虎的。

 

理清表结构之间的对应关系,就用了2天时间。最后确定用SQLBulkCopy,是在周公的博客上看到关于SQLBulkCopy类的使用方法,非常简单易懂,SQLBulkCopy类可以从多张不同字段名,不同表结构的数据表中,提取出需要的数据,导入到你需要的表格字段中。在这之前你只需要设置一下对应关系就行了。毫无疑问这能解决我的需求。花了2天时间,做好了这个Demo,通过从配置文件中读取的信息,分离出对应关系,SQL语句,目标表名,传入到导数据的函数中就可以了。

 

SQL语句和表名都是STRING,对应关系则可以用哈希表来存储。3个属性最好都储存在一个对象中。以下是关键代码

 

        private void convert(string SQL, string TableNmae,Hashtable st)
        {
            SqlDataReader sdr = null;
            count = 0;
            try
            {
                SqlCommand cmd = new SqlCommand(SQL, dbcOld.DB_SQLConnection);
                sdr = cmd.ExecuteReader();
                SqlBulkCopy bulkCopy = new SqlBulkCopy(dbcNew.DB_SQLConnection);
               

                //通过提取哈希表的元素,来记录对应关系
                foreach (string str in st.Keys)
                {
                    bulkCopy.ColumnMappings.Add(str, st[str].ToString());
                }

 

                //设置目标表名称
                bulkCopy.DestinationTableName = TableName;

                //每导入1条数据就执行一次SqlRowsCopied方法
                bulkCopy.NotifyAfter = 1;


                bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
                bulkCopy.WriteToServer(sdr);
               
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                sdr.Close();
            }
        }

 

经理说,数据量比较大,需要设置进度条。5个表一共6000条左右的记录,我导入用了大概1秒钟。我开玩笑说,可惜了这根进度条!

 

今天是第5天,结束了埋头苦干的日子,感觉终于有时间来总结一下了。于是就去周公的博客逛了逛,发现里面的文章大都是非常宝贵的实战开发经验,范围也很广,从C#开发和JAVA开发,还有数据库实用语句等。给人感觉仿佛是他的这一路走来,把脚印都一个个写在了博客中。对于新人来说,是非常有启发的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`SqlBulkCopy` 是 .NET Framework 中的一个类,用于将大量数据一次性批量插入到 SQL Server 数据库中,可以大大提高数据插入的效率。 使用 `SqlBulkCopy` 类可以实现以下几个优点: 1. 提高数据库操作效率:`SqlBulkCopy` 类可将大量数据一次性插入到数据库中,比逐条插入更高效。 2. 减少数据库操作次数:`SqlBulkCopy` 类可以将多个插入操作合并为一个操作,从而减少了数据库操作次数。 3. 简化代码:使用 `SqlBulkCopy` 类可以简化代码,使代码更易读、易维护。 使用 `SqlBulkCopy` 类的基本步骤如下: 1. 创建一个 `SqlConnection` 对象,用于连接到 SQL Server 数据库。 2. 创建一个 `SqlBulkCopy` 对象,指定要插入数据的目标表、连接对象等参数。 3. 创建一个数据源,可以使用 `DataTable` 或 `IDataReader` 对象。 4. 调用 `SqlBulkCopy` 对象的 `WriteToServer` 方法,将数据源中的数据批量插入到数据库中。 以下是一个使用 `SqlBulkCopy` 类将 `DataTable` 对象中的数据插入到 SQL Server 数据库中的示例代码: ```vb.net Using connection As New SqlConnection(connectionString) connection.Open() Using bulkCopy As New SqlBulkCopy(connection) bulkCopy.DestinationTableName = "dbo.MyTable" bulkCopy.WriteToServer(myDataTable) End Using End Using ``` 需要注意的是,`SqlBulkCopy` 类只能用于向 SQL Server 数据库中插入数据,不能用于更新或删除数据。同时,使用该类时需要注意数据源与目标表的列的对应关系,必须保证两者的列数和列名一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值