Domanda

Ho un file CSV con 350.000 righe, ogni riga ha circa 150 colonne.

Quale sarebbe il modo migliore per inserire queste righe in SQL Server utilizzando ADO.Net?

Il modo in cui ho fatto di solito è di creare l'istruzione SQL manualmente. Mi chiedevo se c'è un modo per codificare che inserire semplicemente l'intero DataTable in SQL Server? O qualche scorciatoia come questo.

Tra l'altro ho già provato a fare questo con SSIS, ma ci sono pochi dati clean-up questioni che posso gestire con C #, ma non così facilmente con SSIS. Il dato è iniziato come XML, ma l'ho cambiato in formato CSV per la semplicità.

È stato utile?

Soluzione

Fare una classe "CsvDataReader" che implementa IDataReader. Basta implementare Read (), GetValue (int i), Dispose () e il costruttore: è possibile lasciare il resto gettando NotImplementedException se si vuole, perché SqlBulkCopy non li chiamerà. Utilizzare lettura per gestire la lettura di ogni riga e GetValue di leggere il-esimo valore nella riga.

Poi passarlo al SqlBulkCopy con i mapping di colonna appropriate che si desidera.

Ottengo circa 30000 record / a velocità inserto sec con quel metodo.

Se si ha il controllo del formato di file di origine, renderlo scheda delimitato in quanto è più facile da analizzare rispetto CSV.

Modifica: http://www.codeproject.com/KB/database/CsvReader aspx -. tx Mark Gravell

Altri suggerimenti

SqlBulkCopy se è disponibile. Ecco una spiegazione molto utile di utilizzare SqlBulkCopy in ADO.NET 2.0 con C #

Penso che si può caricare il XML direttamente in un DataSet e quindi mappare la SqlBulkCopy al database e il DataSet.

Hey si dovrebbe tornare a XML, invece di csv, quindi caricare il file XML in una tabella temporanea utilizzando OpenXML, ripulire i dati in tabella temporanea e poi finalmente trattare tali dati.

Ho seguito questo approccio per enormi importazioni di dati in cui i miei file XML si trovano ad essere> 500 MB di dimensione e OpenXML funziona come un fascino.

Si sarebbe sorpreso di quanto velocemente questo dovrebbe funzionare rispetto alle dichiarazioni ADO.NET manuali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top