Come trovare la colonna offendente? Impossibile convertire da stringa a int32

.net c# datatable sqlbulkcopy

Domanda

Sto usando SqlBulkCopy. Così ho reso un datatable e ho specificato le sue colonne, poi ho aggiunto le righe al datatable e poi ho provato ad inserirlo.

System.InvalidOperationException non gestito dal codice utente Message = Il valore dato di tipo String dall'origine dati non può essere convertito in tipo int della destinazione specificata

Continuo comunque a ricevere questo errore. Il fatto è che ho 3 colonne int e non ho idea di quale sia.

Ho anche messo su ogni colonna int il tipo di esso.

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

Sembra ancora avere problemi. Quindi, dove nello stack trace o int l'eccezione dirà la colonna effettiva su cui muore?

Risposta accettata

Scopri l'eccellente classe ValidatingDataReader di Bruce Dunwiddie. Fornisce informazioni davvero eccellenti nei messaggi di eccezione quando si ha questo tipo di problema di mappatura.


Risposta popolare

È possibile importare i dati in una tabella in SQL Server e quindi è possibile utilizzare ISNUMERIC per verificare quale sia:

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

Se non vuoi abbandonare .NET, puoi scorrere le righe e provare a convertirle:

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow