Eccezione SqlBulkCopy, trova il colid

sql sqlbulkcopy

Domanda

Utilizzando SqlBulkCopy e ottenendo questa eccezione:

Ricevuta una lunghezza di colonna non valida dal client bcp per colid 30.

Ho battuto la testa contro questo per ore. So quale riga sta avendo il problema, ma non so quale colonna "colid 30" è. Ci sono 178 colonne nella tabella dei dati. Tutti i valori sembrano essere corretti e non vedo nessuno che sia più lungo di qualsiasi tipo di dati di colonna nel mio database.

Questo database contiene gli elenchi di proprietà e attualmente ha oltre 3 milioni di record, che vanno tutti bene.

C'è un modo per individuare cosa sia il 30? O c'è un modo per visualizzare l'attuale SQL che bcp sta inviando al database?

Risposta accettata

Spero che questo aiuti a risolvere anche i problemi di qualcun altro.

L'errore era dovuto al fatto che uno dei campi stringa / varchar nel datatable aveva un punto e virgola ";" nel suo valore A quanto pare hai bisogno di scappare manualmente prima di fare l'inserto!

Ho fatto un ciclo attraverso tutte le righe / colonne e ho fatto:

string.Replace(";", "CHAR(59)");

Dopodiché, tutto è stato inserito senza problemi.


Risposta popolare

Controlla la dimensione delle colonne nella tabella in cui stai facendo l'inserimento collettivo. potrebbe essere necessario estendere il varchar o altre colonne di stringhe.

Ad esempio, Aumentare le dimensioni da 30 a 50 =>

ALTER TABLE [dbo].[TableName]
ALTER COLUMN [ColumnName] Varchar(50)


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché