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?