我被要求对 PostgreSQL 进行一些研究,在运行以下代码后,当我们读取 DBDataReader 对象时,系统返回两个条目(未命名的门户 1 和未命名的门户 2),但是我想从这两个中读取所有记录门户,然后将信息加载到我的业务对象中,因为每个门户在表中都有超过 5 条记录。
在浏览了互联网上的各个页面后,我发现有一个第三方库(“NpgSQL”> NpgsqlDataReader)提供了这个功能并且它是免费的。我已将他们的库插入到我的解决方案中,它可以按预期工作。但是,我不想使用这个第三方软件,只是想知道是否有一种方法可以从这两个门户网站读取记录,那就太好了。
请注意,您可以在我熟悉的 c# 中为我们提供解决方案。谢谢。
我目前用于检索数据的代码片段
Dim oConnection As DbConnection = DbProviderFactories.GetFactory(CONST_PROVIDER_ODBC).CreateConnection
oConnection.ConnectionString = "Valid connection string goes here"
oConnection.Open()
' Start a transaction as it is required to work with cursors in PostgreSQL
Dim tran As DbTransaction = oConnection.BeginTransaction
' Define a command to call stored procedure show_cities_multiple
Dim command As DbCommand = DbProviderFactories.GetFactory("System.Data.Odbc").CreateCommand
command.CommandText = "SELECT MyTestFunction()"
command.CommandType = CommandType.StoredProcedure
command.Connection = oConnection
command.Transaction = tran
' Execute the stored procedure and obtain the first result set
Dim dr As DbDataReader = command.ExecuteReader()
' Output the rows of the first result set
While dr.Read()
'This is where system show Unnamed Portal 1 or Unnamed portal 2 at the second time.
MsgBox(String.Format("{0}", dr(0)))
End While
tran.Commit()
-- 检索数据的函数。
CREATE OR REPLACE FUNCTION MyTestFunction() RETURNS SETOF refcursor AS $$
DECLARE
ref1 refcursor; -- Declare cursor variables
ref2 refcursor;
BEGIN
OPEN ref1 FOR SELECT * FROM MyTable1;
RETURN NEXT ref1; -- Return the cursor to the caller
OPEN ref2 FOR SELECT * FROM MyTable2;
RETURN NEXT ref2; -- Return the cursor to the caller
END;
$$ LANGUAGE plpgsql;
我目前工作的环境如下:-
32位机。
Visual Studio 2010 + SP1
ODBC 提供程序:PostgreSQL Unicode 9.01.02.00
ADO.Net (System.Data.Odbc)
当然,我期待听到任何反馈,非常感谢您的帮助。