我正在将带有SQL Server后端的WCF服务转换为PostgreSQL。我使用的是Npgsql
,但它没有批量复制选项。 测试是此处的数据集。
这是我的sql代码,
DataSet ds = DuobaseHandler.ToDataSet(test);
DataTable dt = ds.Tables[0];
string TableNameOrig = "CDA." + TableName;
DataTable dataTable = dt;
try
{
ConnectionStringSettings mConString = ConfigurationManager.ConnectionStrings["CommonDataConnection"];
string[] columnNames = dt.Columns.Cast<System.Data.DataColumn>()
.Select(x => x.ColumnName)
.ToArray();
string[] ColumnsFinal = columnNames.Take(columnNames.Count() - 2).ToArray();
using (SqlConnection ConnectionSQL = new SqlConnection(mConString.ConnectionString))
{
ConnectionSQL.Open();
// Delete old entries
SqlCommand truncate = new SqlCommand("TRUNCATE TABLE" + " " + "CDA." + TableName, ConnectionSQL);
truncate.ExecuteNonQuery();
}
SqlBulkCopy bulkCopy = new SqlBulkCopy(mConString.ConnectionString, SqlBulkCopyOptions.TableLock)
{
DestinationTableName = TableNameOrig,
BatchSize = 100000,
BulkCopyTimeout = 360
};
foreach (var item in ColumnsFinal)
{
bulkCopy.ColumnMappings.Add(item.ToString(), item.ToString());
}
bulkCopy.WriteToServer(dataTable);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return true;
答案 0 :(得分:2)
nPgSQL 具有批量复制功能,它只是没有相同的界面。请参阅NpgsqlCopyIn
。
编写一个包装器以支持MS SQL Server接口会很有趣,但它看起来并不像任何人那样,所以你需要转换为nPgSQL接口或编写兼容包装器。
This blog可能有用。
答案 1 :(得分:0)
我用libpd本地方法编写Npgsql BulkCopy。试试我的包。 https://www.nuget.org/packages/NpgsqlBulkCopy/