Caricamento dei dati CSV utilizzando SQLServerBulkCSVFileRecord con allegati e null

c# csv jdbc sqlbulkcopy sql-server

Domanda

Sto cercando di caricare i dati CSV utilizzando SQLServerBulkCSVFileRecord, tuttavia sembra che ciò non consenta i campi racchiusi (stripping delle virgolette) e fornisca un valore per NULL.

Qualche suggerimento su come farlo funzionare? Sembra che queste funzionalità di base siano necessarie per caricare un file CSV.

Codice che sto usando attualmente:

final SQLServerBulkCopy copymanager = new SQLServerBulkCopy(connection);
final SQLServerBulkCSVFileRecord csv = new SQLServerBulkCSVFileRecord(datafile.toString(), true);

final ResultSet resultSet = connection.createStatement().executeQuery(
        String.format("select * from [%s].[%s]", getSchema(), tableName));
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
    csv.addColumnMetadata(i, resultSet.getMetaData().getColumnName(i), resultSet.getMetaData().getColumnType(i),
            resultSet.getMetaData().getPrecision(i), resultSet.getMetaData().getScale(i));
}

copymanager.setDestinationTableName(tableName);
copymanager.writeToServer(csv);

Risposta accettata

È interessante notare che la fonte di SQLServerBulkCSVFileRecord ha un commento

  • Sia BCP che BULK INSERT considerano le virgolette doppie come parte dei dati e generano un errore se qualsiasi dato (ad esempio "10") deve essere
  • inserito in una colonna numerica. La nostra implementazione fa lo stesso.

ciò significa che dovrai analizzare ogni riga del tuo codice per rimuovere preventivamente i valori quotati.

Per quanto riguarda la fornitura di un valore per NULL, puoi farlo nel tuo codice fornendo un valore DEFAULT nella tabella. La tua scelta.



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