最近项目数据库迁移,从Oracle11g转到了MSSQL2008r2
三千万条数据拼接不现实用上了SqlBulkCopy来操作
简单记录一下操作过程:
1.从Oracle数据库查询数据并保存到DataTable,关闭Oracle数据库
2.连接MSSQL创建SqlBulkCopy对象并添加映射,执行操作
1 using (tran = conn.BeginTransaction()) 2 { 3 using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.FireTriggers, tran))//此处FireTriggers是因为在MSSQL上该表有insert触发器 4 { 5 //copy.BulkCopyTimeout = 300;//设置超时时间,避免大批量数据更新时超时失败 6 copy.DestinationTableName = "目标表"; //指定MSSQL服务器上目标表的名称 7 copy.ColumnMappings.Add("源表列名1", "目标表列名1"); 8 copy.ColumnMappings.Add("源表列名2", "目标表列名2"); 9 copy.ColumnMappings.Add("源表列名3", "目标表列名3"); 10 ... 11 copy.WriteToServer(allData);//执行把DataTable中的数据写入DB 12 tran.Commit();//提交事务 13 } 14 }
3.为了避免出现错误可以捕捉异常进行RollBack操作