我被要求对PostgreSQL进行一些研究,并在运行以下代码之后 当我们读取DBDataReader对象时,系统返回两个条目(未命名的Portal 1和未命名的Portal 2), 但是我想从这两个门户中读取所有recods然后加载我的业务对象的信息,因为每个门户在表中有超过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 Prodiver:PostgreSQL Unicode 9.01.02.00
ADO.Net(System.Data.Odbc)
当然,我期待听到任何反馈,我们非常感谢您的帮助。
答案 0 :(得分:1)
psqlODBC使用较少,维护次数少于nPgSQL。
两者都是“第三方”,因为它们是在核心PostgreSQL代码之外维护的。其他被认为对Pg非常重要的工具,如PgBouncer,pgbarman,repmgr,PgAgent-III,Slony-I,Bucardo,Skytools / Londiste等等。
一般情况下,我建议在使用.NET时使用nPgSQL而不是psqlODBC。 nPgSQL支持ADO.NET和Entity Framework,因此您不必更改吨直接使用它。