0

私は過去 10 年間、SQL Server と Oracle を使用してきましたが、PostgreSQL について調査するように依頼されました。最初の調査の後、Function を使用して PostgreSQL データベースからデータを取得することに行き詰まっていることが明らかになりました。

次のコードを使用してデータを取得し、エラーを取得します (「ERROR [26000] ERROR: 準備されたステートメント "mytabletest" が存在しません; 'クエリの実行中にエラーが発生しました)」


コード スニペット

    Dim oDBCommand As DbCommand = GetDBCommand(oConnectionType, "mytabletest", CommandType.StoredProcedure)
    Dim dstResults As DataSet = GetDataSet(ConnectionTypes.ODBC, oDBCommand)


Public Function GetDataReader(dbType As ConnectionTypes, command As DbCommand) As DbDataReader

    Try

        Dim oConnection As DbConnection = GetDBConnection(dbType)

        Dim oDBTransaction As DbTransaction = oConnection.BeginTransaction
        command.Connection = oConnection
        command.Transaction = oDBTransaction


   'GETTING ERROR ON FOLLOWING LINE
        'ERROR [26000] ERROR: prepared statement "mytabletest" does not exist;
        'Error while executing the query
        return command.ExecuteReader()


    Catch ex As Exception
        Throw ex
    Finally
    End Try

    Return Nothing

End Function

私が現在取り組んでいる環境は次のとおりです。

32 ビット マシン。
Visual Studio 2010 + SP1
ODBC プロバイダー: PostgreSQL Unicode 9.01.02.00
ADO.Net (System.Data.Odbc)

私が完全に間違っているか、部分的に行っているかなど、あらゆる提案を受け入れることに注意してください。お気軽に書いてください。

同じ環境を簡単に作成できるように、次のテーブル/関数定義を使用してください。

--- Simple table to make things easier to understand. <br>
CREATE TABLE mytable
(
  messagetypeid integer NOT NULL,
  messagetype character varying(100) NOT NULL
) 



-- Function to retrieve data. <br>
CREATE OR REPLACE FUNCTION mytabletest()  <br>
   RETURNS SETOF refcursor AS $$
    DECLARE 
    ref1 refcursor; 
    BEGIN
      OPEN ref1 FOR SELECT * FROM mytable;
      RETURN NEXT ref1;                                                                               
    END;
    $$ LANGUAGE plpgsql;

ご注意ください:

If I use <br>
  Dim oDBCommand As DbCommand = GetDBCommand(oConnectionType, "SELECT * FROM mytable", CommandType.Text) 

その後、システムは問題なくデータベースから情報を取得できますが、前述したように、「関数」を使用するとすぐに例外がスローされます。


インターネットから解決策を検索しようとして失敗したときに、誰かがテーブルを小文字で作成する必要があると述べたので、そのために小文字で再作成しましたが、問題は解決しません。

4

1 に答える 1