SqlBulkCopy excel 字段映射解决办法二 使用数字索引代替 字段名称 做映射 避免字段中有中文 大小写等情况

多线程的SqlBulkCopy批量导入、事务和SqlBulkCopy使用的数据集中自定义映射字段的注意事项

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

class
Program  

   {  

       static
volatile bool result;  

       static
void Main(string[] args)  

       {  

          DataSet ds = ExportDataSet();  

          //使用2个线程模拟并发操作  

          Thread t = new
Thread(delegate() { result = Insert(ds); Console.WriteLine(result ? "导入成功"
: "导入失败"); });  

          t.Start();  

          Thread t1 = new
Thread(delegate() { result = Insert(ds); Console.WriteLine(result ? "导入成功"
: "导入失败"); });  

          t1.Start();  

          Console.ReadLine();  

       }  

       /// <summary>  

       /// 获取数据DataSet  

       /// </summary>  

       /// <returns></returns>  

       static
private DataSet ExportDataSet()  

       {  

           //局域网的某服务器模拟数据库远程连接  

           SqlConnection RemoteConn = new
SqlConnection("Data Source=192.168.0.183;Initial Catalog=Northwind;User ID=sa;Password=sa");  

           using
(  

            /*目标表与源表结构并不相同,目标表只包含OrderID、CustomerID、EmployeeID、ShipCountry这四个字段。注意这里字段是区分大小写的,不然SqlBulkCopy的WriteToServer方法会报运行时异常:“给定的 ColumnMapping 与源或目标中的任意列均不匹配”的处理方法。这个地方浪费了我1个小时才发现*/

            SqlDataAdapter oda = new
SqlDataAdapter("SELECT [OrderID], [CustomerID], [EmployeeID], [ShipCountry] FROM [Northwind].[dbo].[Orders]", RemoteConn))  

           //如果目标表与源表结构完全一致,则用下面语句即可,msdn的例子也只是这样  

            //SqlDataAdapter oda = new SqlDataAdapter("SELECT * FROM [Ednoland].[dbo].[Score]", RemoteConn))  

           {  

               DataSet ds = new
DataSet();  

               oda.Fill(ds, "Orders");//给定表名  

                 return
ds;  

           }  

       }  

       /// <summary>  

       /// 将DataSet导入远程数据库(未来放在WebService中)  

       /// </summary>  

       /// <param name="ds"></param>  

       /// <returns></returns>  

       public
static bool Insert(DataSet ds)  

       {  

           using
(SqlConnection sqlconn = new
SqlConnection("Data Source=.;Initial Catalog=Northwind;User ID=sa;Password=sa"))  

           {  

               sqlconn.Open();  

               SqlTransaction sqlbulkTransaction = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);  

               using
(SqlBulkCopy sbc = new
SqlBulkCopy(sqlconn, SqlBulkCopyOptions.KeepIdentity, sqlbulkTransaction))  

               {  

                   sbc.BatchSize = 20000;//20000行每连接  

                   sbc.BulkCopyTimeout = 50;//50秒超时  

                   if
(ds.Tables == null
|| ds.Tables.Count == 0)  

                       return
false;  

                   if
(ds.Tables.Count == 1)  

                   {  

                       return
BulkInsert(sbc, ds.Tables[0], sqlbulkTransaction); ;  

                   }  

                   else

                   {  

                       bool
res = true;  

                       foreach
(DataTable dt in
ds.Tables)  

                       {  

                           res = BulkInsert(sbc, dt, sqlbulkTransaction);  

                       }  

                       return
res;  

                   }  

               }  

           }  

       }  

       private
static bool BulkInsert(SqlBulkCopy sbc, DataTable dt, SqlTransaction sqlbulkTransaction)  

       {  

           

           bool
res = true;  

                      try

           {  

             //将DataTable表名作为待导入库中的目标表名  

               sbc.DestinationTableName = dt.TableName;  

              //将数据集合和目标服务器库表中的字段对应  

               for
(int
i = 0; i < dt.Columns.Count; i++)  

               {  

                   //sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);  

                     sbc.ColumnMappings.Add(i,i);//可以避免字段大小写不一致造成无法映射的问题  

               }  

               sbc.WriteToServer(dt);  

               //提交事务  

               sqlbulkTransaction.Commit();  

               res = true;  

           }  

           catch
(SqlException ex)  

           {  

               res = false;  

               sqlbulkTransaction.Rollback();  

           }  

           return
res;  

       }  

   }

  

SqlBulkCopy excel 字段映射解决办法二 使用数字索引代替 字段名称 做映射 避免字段中有中文
大小写等情况

时间: 2024-08-24 08:22:03

SqlBulkCopy excel 字段映射解决办法二 使用数字索引代替 字段名称 做映射 避免字段中有中文 大小写等情况的相关文章

【游戏开发】Netty TCP粘包/拆包问题的解决办法(二)

上一篇:[Netty4.X]Unity客户端与Netty服务器的网络通信(一) 一.什么是TCP粘包/拆包 如图所示,假如客户端分别发送两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4中情况: 第一种情况:Server端分别读取到D1和D2,没有产生粘包和拆包的情况. 第二种情况:Server端一次接收到两个数据包,D1和D2粘合在一起,被称为TCP粘包. 第三种情况:Server端分2次读取到2个数据包,第一次读取到D1包和D2包的部分内容D2_1,第二次

SqlBulkCopy excel 字段映射解决办法一 修改中间件datatable 的 ColumnName 使之 与 目标表一致

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. read.qidian.com/B

spark 编译遇到的错误及解决办法(二)

[INFO] Spark Project Parent POM ........................... SUCCESS [ 17.129 s] [INFO] Spark Project Tags ................................. SUCCESS [ 29.191 s] [INFO] Spark Project Sketch ............................... SUCCESS [ 14.014 s] [INFO] Spa

Dynamics CRM2013/2015 插件注册工具登录后无法显示assembly列表问题的解决办法二

本篇接前面的一篇博文:http://blog.csdn.net/vic0228/article/details/47079717,前篇提供了一种解决方案,将本机系统的语言切换成英文即可,今天再来介绍第二种方法,打开插件注册器所在的文件夹,你看到的列表中的文件夹都是对应的各种语言的语言包,只留我下图中红框框出来的英文语言包文件夹,其余的语言包文件夹全部删掉即可,亲测有效,我平时使用的SDK均是英文版的,中文版的没用过也不知道是否有相同的问题,可自行测试. 版权声明:本文为博主原创文章,未经博主允许

Asp.net 从Excel读取图片并保存,无法从内存读取图片,Excel组件和相关IIS的配置及解决办法

</pre>目的:Asp.net web页面,读取Excel,(用的office组件),中的图片注意的事项:<p></p><p>只提供部分代码,因为重点是配置.</p><p>1:要想从Excel里读取图片,只能用剪贴板的方面将图片复制到内存然后再保存图片.</p><p>2:剪贴板的使用要引用WinForm</p><p>3: Excel是单线程的方式,所以代码里使用剪贴板也要用单线程的方式

问题及解决办法

一.配置型问题: 1,使用spring.net部署在虚拟目录上的错误问题 解决办法: 在spring的配置节点上加如下代码:<spring><context name="网站部署所在的虚拟目录的名字" type="Spring.Context.Support.WebApplicationContext, Spring.Web"><!-- ... --></context></spring> 二.技术处理型问

右键新建文本文档消失解决办法

解决办法一: 开始-程序-附件-记事本 粘贴以下内容,然后另存后缀名为   右键新建文本.reg    导入注册表就可以了 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.txt] @="txtfile" "Content Type"="text/plain" [HKEY_CLASSES_ROOT\.txt\ShellNew] "NullFile"="

无法启动MYSQL服务”1067 进程意外终止”解决办法——汇总及终极方法

自己一开始按照百度经验里的方法--<MySQL下载安装.配置与使用(win7x64)>去安装和配置,但是到后面步骤总是出现1067代号的错误.慢慢折腾去解决. 这里汇总各种导致mysql提示无法启动MYSQL服务"1067 进程意外终止"的一些解决办法.自己遇到这个问题是查了很多方法不行,最后看到一个论坛的讨论,试了一下竟然可以.一下是网上的部分方法,最后可以的那个方法我放在最后面: 启用MySql服务的时候出现"windows无法启动mysql服务(位于本地计算

php常见错误和解决办法

常见错误 --------- 1.错误提示:Call-time pass-by-reference has been removed 解决办法:php.ini 修改为allow_call_time_pass_reference=True --------- 解决办法二:修改代码 原因是因为 高版本php(5.4以上)不能通过fn1(&$a)这种方式传参调用函数.  正确应该是在定义是使用 &$var function fn1(& $var) { //other code} ----