如何找到违规栏?无法从字符串转换为int32

.net c# datatable sqlbulkcopy

我正在使用SqlBulkCopy。所以我创建了一个数据表并指定了它的列,然后向数据表中添加了行,然后尝试插入它。

用户代码未处理System.InvalidOperationException消息=数据源中String类型的给定值无法转换为指定目标的int类型

我不断收到这个错误。问题是我有3个int列,我不知道它是哪一个。

我甚至在每个int列上添加了它的类型。

 datatable.Columns.Add("Id", typeof(int));

似乎还有问题。那么在堆栈跟踪或int中,异常会说它死在哪个实际列上?

一般承认的答案

查看Bruce Dunwiddie的优秀ValidatingDataReader类。当您遇到此类映射问题时,它会在异常消息中提供非常出色的信息。


热门答案

您可以将数据导入SQL Server中的表,然后您可以使用ISNUMERIC查看它是:

SELECT *
  FROM YourImportTable
 WHERE ISNUMERIC(Column1) = 0
    OR ISNUMERIC(Column2) = 0
    OR ISNUMERIC(Column3) = 0

如果您不想离开.NET,可以遍历行并尝试转换它们:

For Each dr as DataRow in datatable.Rows
   If Not IsNumeric(dr.Item(5))
      ' It's this column
   End If
   If Not IsNumeric(dr.Item(6))
      ' It's this column
   End If
Next


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因