SqlBulkCopy 跨数据库,表自定义导入

简介:

使用场景:

一个数据库中的表数据,导入到另一个数据库中的表中,这两个表的表结构不一样,如果表结构一样的时候,导入非常简单,直接读取导入就行了,表结构不一样,就意味着需要加入一些判断,SqlBulkCopy 提供了 ColumnMappings,但这只是列名的映射,而不像 AutoMapper 那样可以自定义映射转换,那如何判断导入呢?答案就是在导入之前对原数据集进行验证,得到和目标表一致的表数据,我们可以使用 case when 进行判断。比如 table1 中有两列:State1 和 State2,对应 table1 中的 State,值对应关系为:

  1. State1 0 && State2 0 对应 State 0
  2. State1 1 && State2 0 对应 State 1
  3. State1 0 && State2 1 对应 State 2
  4. State1 1 && State2 1 对应 State 3

代码示例:


        /// <summary>
        /// 数据库中的表复制到另一个数据库中的表
        /// </summary>
        private static void SqlBulkCopyMethod()
        {
            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
            try
            {
                SqlConnection connetionPub = new SqlConnection("Server=.; Database=DB1; User ID=sa;Password=sa; MultipleActiveResultSets=True;");
                using (connetionPub)
                {
                    SqlCommand commandPub = connetionPub.CreateCommand();
                    using (commandPub)
                    {
                        commandPub.CommandText = @"select 
                                                    *,
                                                    (case when (State1 = 0 and State2=0)
                                                    then 0
                                                    when (State1 = 0 and State2=1)
                                                    then 1
                                                    when (State1 = 1 and State2=0)
                                                    then 2
                                                    when (State1 = 1 and State2=1)
                                                    then 3
                                                    else 4 end
                                                    ) State
                                                    from table1";
                        commandPub.CommandType = System.Data.CommandType.Text;
                        connetionPub.Open();

                        SqlConnection connectionBulkCopy = new SqlConnection("Server=.; Database=DB2; User ID=sa;Password=sa; MultipleActiveResultSets=True;");
                        using (connectionBulkCopy)
                        {
                            connectionBulkCopy.Open();
                            SqlDataReader dataReader = commandPub.ExecuteReader();
                            SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionBulkCopy);
                            using (bulkCopy)
                            {
                                bulkCopy.BatchSize = 1000;
                                bulkCopy.ColumnMappings.Add("id", "ID");
                                bulkCopy.ColumnMappings.Add("name", "Name");
                                bulkCopy.ColumnMappings.Add("State", "State");
                                bulkCopy.DestinationTableName = "table2";
                                bulkCopy.WriteToServer(dataReader);
                            }
                        }
                    }
                }
                TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
                TimeSpan ts3 = ts1.Subtract(ts2).Duration();
                Console.WriteLine(string.Format("执行时间:{0}秒", ts3.TotalSeconds.ToString()));
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/sqlbulkcopy_data_import.html,如需转载请自行联系原作者
相关文章
|
1月前
|
XML 关系型数据库 MySQL
python将word(doc或docx)的内容导入mysql数据库
用python先把doc文件转换成docx文件(这一步也可以不要后续会说明),然后读取docx的文件并另存为htm格式的文件(上一步可以直接把doc文件另存为htm),python根据bs4获取p标签里的内容,如果段落中有图片则保存图片。(图片在word文档中的位置可以很好的还原到生成的数据库内容) 我见网上有把docx压缩后解压获取图片的,然后根据在根据xml来读取图片的位置,我觉得比较繁琐。用docx模块读取段落的时候还需要是不是判断段落中有分页等,然而转成htm之后就不用判断那么多直接判断段落里的样式或者图片等就可以了。
22 1
|
3月前
|
JSON NoSQL 小程序
Mongodb数据库的导出和导入总结
Mongodb数据库的导出和导入总结
189 0
|
4月前
|
SQL 数据库 Python
记Flask-Migrate迁移数据库失败的两个Bug——详解循环导入问题
Flask-Migrate迁移数据库失败的两个Bug 1、找不到数据库:Unknown database ‘***’ 若还没有创建数据库,该迁移工具不会自动创建。你可以使用SQL命令手动创建一个数据库:
38 0
|
1月前
|
SQL 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
101 1
|
3月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(一)
MySQL | 数据库的管理和操作【表的增删改查】
|
3月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(二)
MySQL | 数据库的管理和操作【表的增删改查】(二)
|
3月前
|
SQL 数据库
数据库修改表
数据库修改表
32 0
|
15天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
1月前
|
存储 关系型数据库 MySQL
Python导入Excel数据到MySQL数据库
Python导入Excel数据到MySQL数据库
92 0

热门文章

最新文章