DataAdapter在填充DataTable时抛出错误

时间:2015-09-21 05:11:18

标签: c# sql npgsql dataadapter

我正在尝试使用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 \“不存在”} enter image description here

我使用的是NpgSql版本 3.0.2.0 VS 2013 Postgres 9.3

但是当我在pgadmin的sql编辑器中运行相同的查询时,它运行得很好,并按照需要返回结果。

更新:查询可以与Npgsql 2.0.1.0一起使用,但不能与3.x

一起使用

1 个答案:

答案 0 :(得分:0)

这是启动Npgsql 3.x的已知问题,如下所述:https://github.com/npgsql/npgsql/issues/641

简而言之,您无法创建实体(例如表)并在同一个NpgsqlCommand中使用该实体 - 只需在单独的命令中发送您的CREATE TABLESELECT

请参阅上面的问题以获得解释,它与Npgsql如何与PostgreSQL进行通信的一些非常低级的细节有关。不幸的是,我们不太可能很快解决这个问题。