SqlBulkCopy dal foglio di calcolo

asp.net c# sqlbulkcopy

Domanda

Sto usando SqlBulkCopy per importare i record da un foglio di calcolo in un database SQL Server.

L'operazione di copia di massa funziona correttamente nella maggior parte delle condizioni. Comunque sta facendo qualcosa che non riesco a capire.

Ho una colonna definita nei miei mapping di colonne:

bCopy.ColumnMappings.Add("Amount", "Amount");

Nel foglio di lavoro questo è un varchar, come è nella mia tabella di lavoro (importare su una tabella di lavoro per fare un po 'di validazione prima di spostare i dati sulla mia tabella live).

Mentre stavo testando, sono andato in un record e ho cambiato il valore da un numero alla parola FOO. Quindi ho eseguito la mia importazione.

La mia routine di validazione identifica correttamente un problema con la colonna - ma è perché la colonna è nullo, non perché il valore non è un numero. Quando ho controllato il database, ho trovato che questo campo è stato importato con un valore nullo. Pensavo che il valore avrebbe dovuto essere FOO.

Questo mi sembra strano.

Se fa alcuna differenza, sto usando OLEDB per accedere al foglio di calcolo come una tabella di database e passare OLEDBDataReader come origine nel mio oggetto BulkCopy.

Il driver OLEDB è abbastanza intelligente da comprendere che questo non è un valore valido in quella colonna? Ho pensato che tutto sarebbe stato stringa / varchar di default. (Non apportiamo alcuna modifica al tipo di dati della colonna nel foglio di calcolo)

MODIFICARE

Ho controllato il DataReader come suggerito - e abbastanza strano, quando cambio il campo Amount per avere un valore di stringa, il valore nel datareader è nullo. Questa è la prima volta che vedo questo tipo di comportamento in un datareader di Excel. Altri campi di stringhe funzionano bene.

Risposta accettata

Ho risolto il problema aggiungendo IMEX = 1 alla mia stringa di connessione OLEDB. Ora il valore è mostrato nel datareader. (Suppongo di doverlo fare per supportare colonne di valori misti)



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é