2012-02-14 97 views
11

这是我的代码,包含以下列和DB中的那些列是nvarchars无法使用sqlbulkcopy插入数据表

SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, 
System.Data.SqlClient.SqlBulkCopyOptions.Default, transaction); 

bulkCopy.DestinationTableName = "Test"; 
bulkCopy.ColumnMappings.Add("Number", "Code"); 
bulkCopy.ColumnMappings.Add("Type", "Type"); 
bulkCopy.ColumnMappings.Add("Group", "Group"); 
bulkCopy.ColumnMappings.Add("Short Text", "ShortText"); 
bulkCopy.ColumnMappings.Add("Text", "Description"); 
bulkCopy.WriteToServer(dataTable); 

我试图插入一个DB整体数据表,使用批量复制,但我收到此错误:

The given value of type String from the data source cannot be converted to type nvarchar of the specified target column.

+0

您需要向我们展示一些表格结构,代码等 - 只是出现这种错误,我们无法帮助您...... - 请参阅http://tinyurl.com/so-hints – 2012-02-14 07:35:11

+0

请检查你来源数据。源中可能有无效数据。 – 2012-02-14 07:43:03

回答

18

可以由太短柱造成的。如果您的ShortText列被定义为NVARCHAR(30)并且您有40个字符的字符串,则可能会出现该错误。看到这里例如:http://forums.asp.net/p/1228890/2212376.aspx

+0

宾果!这是我的问题所在。好的提示,以及错误信息不会告诉你'整个故事'的例子。 – NateJ 2013-12-06 23:59:46

+0

太棒了!保存了我的生活;) – Icarus 2015-09-04 21:03:19

4

我有这个问题的另一个答案,也许它可以派上用场。如果您有一个包含"(引号)的字符串,您也会收到此错误消息。至少我刚收到这条错误消息,并且我搜索了错误的行,并且发现了这一点。当我删除引号时,错误消失。

+0

我花了几个小时试图解决这个错误,这原来也是我的罪魁祸首。我只是将源数据库中的所有数据复制到Excel电子表格中,在表单中搜索错误的字符并找到一个实例。 – Krondorian 2015-01-06 21:55:42

+0

有没有办法让它使用引号,或者以某种方式导入后再插入它们? – 2016-11-04 14:12:15