如何找到違規欄?無法從字符串轉換為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合法嗎? 是的,了解原因