无法使用SqlBulkCopy插入数据表

12

这是我的代码,其中包含以下列,而在数据库中,这些列是 nvarchar 类型。

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);

我想使用批量复制将整个数据表插入数据库,但是遇到了以下错误:

无法将数据源中给定的字符串类型的值转换为指定目标列的nvarchar类型。


你需要向我们展示一些表结构、代码等等——仅凭那个错误,我们不可能帮助你......请参见http://tinyurl.com/so-hints。 - marc_s
请检查您的源数据。可能存在无效数据。 - Pongsathon.keng
2个回答

19

这个错误可能是由于列的长度不够引起的。比如,如果你的ShortText列被定义为NVARCHAR(30),但你却有一个40个字符的字符串,你就会得到这个错误。这里举例说明:http://forums.asp.net/p/1228890/2212376.aspx


太棒了!这就是我的问题所在。好的提示,也是错误信息没有告诉你“整个故事”的一个例子。 - NateJ
太棒了!救了我的命 ;) - Icarus

4

我对这个问题有另外一个答案,也许对某些人会有帮助。如果您有一个包含引号"(双引号)的字符串,您也会遇到此错误消息。至少我刚刚遇到了这个错误消息,并且我找错了行号,并找到了原因。当我删除引号时,错误消失了。


我花了几个小时尝试解决这个错误,结果发现这也是导致问题的罪魁祸首。我将数据从源数据库复制到一个 Excel 电子表格中,搜索该表以查找坏字符,并找到了一个实例。 - Krondorian
有没有办法让它在引号的情况下工作,或者在导入后以某种方式重新插入它们? - Andriy Kozachuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接