¿Cómo encontrar la columna ofensiva? No se puede convertir de cadena a int32

.net c# datatable sqlbulkcopy

Pregunta

Estoy usando SqlBulkCopy. Así que hice un datatable y especificé sus columnas, luego agregué filas al datatable y luego traté de insertarlo.

System.InvalidOperationException no fue manejado por el código de usuario Mensaje = El valor dado de tipo String del origen de datos no se puede convertir al tipo int del destino especificado

Aunque sigo recibiendo este error. La cosa es que tengo 3 columnas int y no tengo idea de cuál es.

Incluso puse en cada columna int el tipo de eso.

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

Todavía parece tener problemas. Entonces, ¿dónde en la traza de pila o int la excepción dirá la columna real en la que muere?

Respuesta aceptada

Echa un vistazo a la excelente clase ValidatingDataReader de Bruce Dunwiddie. Proporciona información realmente excelente en los mensajes de excepción cuando tiene este tipo de problema de mapeo.


Respuesta popular

Puede importar los datos a una tabla en SQL Server, y luego puede usar ISNUMERIC para ver cuál es:

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

Si no quieres dejar .NET, puedes recorrer las filas y tratar de convertirlas:

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué