2016-04-19 4 views
0

Ich habe auf NPGSQL 3.0.5 aktualisiert und erkannte, dass die NpgsqlCopyIn nicht mehr verfügbar ist. Mit älteren Versionen konnte ich eine CSV-Datei mit NpgsqlCopyIn verarbeiten, die sehr schnell und effizient ist, um große Datenmengen zu kopieren. Ich benutzenMassenkopie CSV-Dateien mit NPGSQL 3.0.5 BinaryImporter

var copystr = "COPY tablename (col1,col2,etc) FROM 'csv file' STDIN WITH DELIMITER ',' CSV HEADER" ; 
NpgsqlCommand dbCommand = new NpgsqlCommand(copyStr, _DataStoreConnection); 
NpgsqlCopyIn copyIn = new NpgsqlCopyIn(dbCommand, _DataStoreConnection, stream); 
copyIn.Start(); 

Aber mit Version 3.0, ich konnte keinen Weg für Massenkopieren von nur lassen den binären Importeur, die Daten CSV finden. Stattdessen verwende ich den Code unten

StreamReader streamReader = null; 
try { 
    streamReader = new StreamReader(fileStream); 
    { 
     var copyStr = string.Format("COPY {0} ({1}) FROM STDIN (FORMAT BINARY)", _DataStoreName, string.Join(",", _DataStoreColumns.Select(a => a.ToLower()))); 
     if (_DataStoreConnection.State == ConnectionState.Closed) 
     _DataStoreConnection.Open(); 
     string csvLine = string.Empty; 
     while ((csvLine = streamReader.ReadLine()) != null) 
     { 
      if (lineCount > 0) 
      { 
       using (var importWriter = _DataStoreConnection.BeginBinaryImport(copyStr)) 
       { 
        importWriter.WriteRow(csvLine.Split(',')); 
       } 
      } 
      else 
      { 
       lineCount++; //This is to skip the first line from the CSV file. First line will be header, so skip it. 
      } 
     } 
    } 
} 

Gibt es eine Möglichkeit, wo ich die BinaryImporter angeben können, dass die Eingangsdaten CSV ist, so dass sie kümmert sich der Begrenzer nimmt und die Daten an Datenspeicher wie in NpgSqlCopyIn Einfügen?

Antwort

0

Sie können den binären Importeur verwenden CSV importiert werden, weil, na ja, CSV nicht binär :)

ist

Der binäre Importeur ist ein effizienter Weg, um Ihre Daten zu importieren, ein Beispiel in the Npgsql docs zu sehen. Wenn Sie absolut CSV importieren müssen, können Sie dies immer noch tun, indem Sie BeginTextImport, aber Sie müssen den Text selbst formatieren, d. H. Das Trennzeichen und so weiter. Siehe dazu auch die Dokumentation.

Verwandte Themen