从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开发,还有数据库实用语句等。给人感觉仿佛是他的这一路走来,把脚印都一个个写在了博客中。对于新人来说,是非常有启发的。

周公博客地址:

http://hi.csdn.net/space-609.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值