将数据集插入到表PostgreSQL中

时间:2014-07-20 16:15:20

标签: c# sql wcf postgresql

我正在将带有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;

2 个答案:

答案 0 :(得分:2)

nPgSQL 具有批量复制功能,它只是没有相同的界面。请参阅NpgsqlCopyIn

编写一个包装器以支持MS SQL Server接口会很有趣,但它看起来并不像任何人那样,所以你需要转换为nPgSQL接口或编写兼容包装器。

This blog可能有用。

答案 1 :(得分:0)

我用libpd本地方法编写Npgsql BulkCopy。试试我的包。 https://www.nuget.org/packages/NpgsqlBulkCopy/