2015-09-21 9 views
0

Я пытаюсь заполнить DataTable, используя NpgsqlDataAdapter. Я подготовил свою команду, как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.0, VS 2013 и Postgres 9.3

НО когда я запустить тот же запрос в редакторе SQL в pgadmin, он работает точно и возвращать результат в соответствии с желательно.

UPDATE: Запрос работает плавно Npgsql 2.0.1.0 но не с 3.x

+0

Из какой таблицы вам нужно создать таблицу tmp? –

+0

Попробуйте этот путь 'drop table if exists tempdata; создайте временную таблицу tempdata как выберите p_invno, edate, code, product, quantity, unitprice, trancode from tbl', почему вы использовали для создания таблицы Temp для заполнения datatable, Вы можете напрямую использовать инструкцию select для заполнения! –

+0

Я пытаюсь вставить данные в таблицу temp из результата, возвращаемого запросом – Bunzitop

ответ

0

Это известная проблема, начиная Npgsql 3.x, описанный здесь: https://github.com/npgsql/npgsql/issues/641.

В двух словах вы не можете создать сущность (например, таблицу) и использовать эту сущность внутри той же NpgsqlCommand - просто отправьте свои CREATE TABLE и ваши SELECT в отдельные команды.

См. Выше проблему для объяснения, это связано с некоторыми довольно низкоуровневыми подробностями о том, как Npgsql связывается с PostgreSQL. К сожалению, вряд ли мы исправим это очень скоро.

+0

Я пишу код как 'CREATE TEMP TABLE TABLENAME AS SELECT Поля из temp Table' У меня есть более 4 таких команд, как один запрос. Должен ли я сначала создавать временную таблицу в разных запросах, а затем заполнять данные только этой таблицей? – Bunzitop