私は過去 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)
その後、システムは問題なくデータベースから情報を取得できますが、前述したように、「関数」を使用するとすぐに例外がスローされます。
インターネットから解決策を検索しようとして失敗したときに、誰かがテーブルを小文字で作成する必要があると述べたので、そのために小文字で再作成しましたが、問題は解決しません。