zoukankan      html  css  js  c++  java
  • 【记录】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;
                }
            }
    
  • 相关阅读:
    Hidden、ViewState、ControlState 区别
    使用 CSS3 中的伪类渲染表格
    IIS与Apache
    好奇怪的问题~
    博客可长可短-UnobtrusiveValidationMode的理解
    一路走来,一些感触,一些想法
    网页中一次导出多张Excel的问题
    [Leetcode][Python]56: Merge Intervals
    [Leetcode][Python]55: Jump Game
    [Leetcode][Python]54: Spiral Matrix
  • 原文地址:https://www.cnblogs.com/xishuai/p/sqlbulkcopy_data_import.html
Copyright © 2011-2022 走看看