我正在尝试使用NpgsqlDataAdapter填充DataTable。我准备好了我的命令
string commandString=@" drop table if exists tempdata;
create temp table tempdata as SELECT X X X X from (_query_);
SELECT x+x, xx, x-y INTO newTempTable FROM tempdata;
使用以下函数填充数据表中的数据
public DataTable Searchpg(string CommandString, NpgsqlParameter[] param)
{
DataTable ResultTable = new DataTable();
try
{
OpenConnection();
DbCommandpg.CommandText = CommandString;
DbCommandpg.Connection = DatabaseConnectionpg;
DbCommandpg.Parameters.Clear();
if (param != null)
{
DbCommandpg.Parameters.AddRange(param);
}
adappg.SelectCommand = DbCommandpg;
ResultTable.Clear();
adappg.Fill(ResultTable);
}
catch (Exception ex)
{
File.writeException(ex.Message, null);
throw ex;
}
finally
{
DatabaseConnectionpg.Close();
}
return ResultTable;
}
adappg.Fill(ResultTable);
错误消息 {“42P01:relation \”tempdata \“不存在”}
我使用的是NpgSql版本 3.0.2.0 , VS 2013 和 Postgres 9.3
但是当我在pgadmin的sql编辑器中运行相同的查询时,它运行得很好,并按照需要返回结果。
更新:查询可以与Npgsql 2.0.1.0
一起使用,但不能与3.x
答案 0 :(得分:0)
这是启动Npgsql 3.x的已知问题,如下所述:https://github.com/npgsql/npgsql/issues/641。
简而言之,您无法创建实体(例如表)并在同一个NpgsqlCommand中使用该实体 - 只需在单独的命令中发送您的CREATE TABLE
和SELECT
。
请参阅上面的问题以获得解释,它与Npgsql如何与PostgreSQL进行通信的一些非常低级的细节有关。不幸的是,我们不太可能很快解决这个问题。