Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据集插入表PostgreSQL_C#_Sql_Wcf_Postgresql - Fatal编程技术网

C# 将数据集插入表PostgreSQL

C# 将数据集插入表PostgreSQL,c#,sql,wcf,postgresql,C#,Sql,Wcf,Postgresql,我正在将带有SQL Server后端的WCF服务转换为PostgreSQL。我正在使用,但它没有批量复制选项test是此处的数据集 这是我的sql代码 DataSet ds = DuobaseHandler.ToDataSet(test); DataTable dt = ds.Tables[0]; string TableNameOrig = "CDA." + TableName; DataTable dataTable = dt;

我正在将带有SQL Server后端的WCF服务转换为PostgreSQL。我正在使用,但它没有批量复制选项test是此处的数据集

这是我的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;
DataSet ds=DuobaseHandler.ToDataSet(测试);
DataTable dt=ds.表[0];
字符串TableName orig=“CDA.”+TableName;
DataTable=dt;
尝试
{
ConnectionString设置mConString=ConfigurationManager.ConnectionString[“CommonDataConnection”];
string[]columnNames=dt.Columns.Cast()
.选择(x=>x.ColumnName)
.ToArray();
string[]ColumnsFinal=columnNames.Take(columnNames.Count()-2.ToArray();
使用(SqlConnection ConnectionSQL=newsqlconnection(mConString.ConnectionString))
{
ConnectionSQL.Open();
//删除旧条目
SqlCommand truncate=新的SqlCommand(“truncate TABLE”+“”+“CDA.”+表格名,ConnectionSQL);
truncate.ExecuteNonQuery();
}
SqlBulkCopy bulkCopy=新的SqlBulkCopy(mConString.ConnectionString,SqlBulkCopyOptions.TableLock)
{
DestinationTableName=TableNameOrig,
批量大小=100000,
BulkCopyTimeout=360
};
foreach(最后一列中的var项)
{
添加(item.ToString(),item.ToString());
}
bulkCopy.WriteToServer(数据表);
}
捕获(例外情况除外)
{
控制台写入线(ex);
}
返回true;
nPgSQL确实有大容量复制功能,只是没有相同的接口。看

编写一个支持MS SQL Server接口的包装器会很有趣,但看起来没有人这样做,因此您需要转换到nPgSQL接口或编写一个兼容性包装器


可能有用。

我使用libpd本机方法编写Npgsql BulkCopy。请尝试我的包。

该产品被称为PostgreSQL(请参阅),而不是“posegresql”,因为您一直坚持拼写错误。。。。请停止撤销我对你的修复-我正在努力使它更有用和可读性here@marc_s是的,我错误地拒绝了你的编辑,它是在审阅别人的文章中间道歉的。您可以编辑nownPgSQL有一个大容量复制功能,它只是没有相同的接口。看见写一个支持MS SQL Server接口的包装器会很有趣,但看起来没有人这么做。我知道npsqlcopyin可以工作,但它需要一个字符串类型的列,无论如何都会尝试。谢谢