儘管我一直在使用SQL Server,但是從最近十年來,我一直要求 對PostgreSQL做一些研究,之後一些初步調查顯示,我現在堅持使用Function從PostgreSQL數據庫中檢索數據。使用ADO.Net從「PostgreSQL數據庫」中檢索數據「VB.NET」
使用下面的代碼段來檢索數據和獲取錯誤 ( '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
Environement我正在上以下內容: -
32 Bit Machine. Visual Studio 2010 + SP1 ODBC Prodiver: 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)
然後系統管理不過來檢索datbase信息沒有任何問題,因爲我一旦提到我們使用「Function」它會引發異常。
在我從互聯網搜索任何解決方案失敗的努力過程中,有人提到應該使用小寫創建表,所以只是爲了它我用小寫重新創建,但問題仍然存在。
克里斯,你是個明星! 非常感謝你的努力,使其能夠按預期工作。 這不是一個將函數定義傳遞給 命令對象的好方法,但是,我想我們沒有任何選擇,只能用 來使用你的建議。我花了將近一天才能到達現在的位置:(在這個特殊情況下,他們並沒有讓開發者更容易。 再一次,非常感謝您的意見。非常感謝。 –