2010-06-04 31 views
3

我正在使用SqlBulkCopy。所以我做了一个数据表,并指定它的列,然后将行添加到数据表中,然后尝试插入它。如何找到违规列?不能从字符串转换为int32

System.InvalidOperationException了 由用户代码消息未处理=来自 数据源类型字符串的 给定值不能被转换为指定的目标的 int类型

总是收到此虽然错误。事情是我有3个int列,我不知道它是哪一个。

我甚至把每个int列的类型。

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

还好像有问题。那么在堆栈跟踪或int中的哪个位置,它会说它死去的实际列?

+0

您是否有内部的例外信息? – volody 2010-06-04 22:35:28

回答

3

退房布鲁斯Dunwiddie的优秀ValidatingDataReader类。当您遇到这种映射问题时,它会在异常消息中提供非常出色的信息。

0

您可以将数据导入到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 
+0

我发现这是一个映射问题。 – chobo2 2010-06-05 01:13:44

+0

那么你不再有问题了?也许表明在你的问题? – Peter 2010-06-06 04:34:15