Как найти оскорбительную колонку? Не могу конвертировать из строки в int32 - PullRequest
3 голосов
/ 05 июня 2010

Я использую SqlBulkCopy. Поэтому я создал таблицу данных и указал ее столбцы, затем добавил строки в таблицу данных и попытался вставить ее.

System.InvalidOperationException было необработанный кодом пользователя Сообщение = данное значение типа String из источник данных не может быть преобразован в введите int указанной цели

Я продолжаю получать эту ошибку, хотя. Дело в том, что у меня есть 3 столбца типа int, и я понятия не имею, какой это столбец.

Я даже ставлю на каждый столбец типа int его тип.

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

Кажется, все еще есть проблемы. Так где же в трассировке стека или в исключении int будет указан фактический столбец, на котором он умирает?

Ответы [ 2 ]

3 голосов
/ 05 июня 2010

Проверьте превосходный класс Брюса Данвидди ValidatingDataReader . Он предоставляет действительно отличную информацию в сообщениях об исключениях, когда возникает такая проблема сопоставления.

0 голосов
/ 05 июня 2010

Вы можете импортировать данные в таблицу в 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
...