2015-09-21 71 views
0

我想用NpgsqlDataAdapter填充DataTable。我準備我的命令,DataAdapter在填寫DataTable時拋出錯誤

string [email protected]" 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; 

並採用以下功能DataTable中

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:關係「tempdata \」不存在「} enter image description here

我使用的版本Npgsql的3.0.2.0VS 2013的Postgres 9.3

但是當我運行在pgAdmin的SQL編輯器相同的查詢,它運行精細,並返回結果爲每期望。

UPDATE:查詢工程進展順利與2.0.1.0 Npgsql的,但不與3.x

+0

從哪個表中您需要創建tmp表? –

+0

嘗試像這樣'drop table if tempdata;創建臨時表tempdata作爲選擇p_invno,edate,代碼,產品,數量,單價,從tbl'轉碼,爲什麼你用來創建一個Temp表來填充數據表,你可以直接使用select語句來填充! –

+0

我試圖從查詢結果 – Bunzitop

回答

0

這是Npgsql的開始3.x中,這裏所描述的已知問題:https://github.com/npgsql/npgsql/issues/641

簡而言之,您不能在同一個NpgsqlCommand內創建一個實體(例如表)並使用該實體 - 只需在單獨的命令中發送CREATE TABLESELECT即可。

查看上述問題的解釋,它與Npgsql如何與PostgreSQL進行通信的一些相當低級的細節有關。不幸的是,我們不太可能會盡快解決這個問題。

+0

我正在將代碼編寫爲'CREATE TEMP TABLE TABLENAME AS SELECT Fields from temp Table'我有超過4個這樣的命令作爲單個查詢。我應該首先在不同的查詢中創建臨時表,然後只向該表填充數據? – Bunzitop