1

我被要求对 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)

当然,我期待听到任何反馈,非常感谢您的帮助。

4

1 回答 1

1

与 nPgSQL 相比,psqlODBC 的使用和维护更少。

两者都是“第三方”,因为它们是在核心 PostgreSQL 代码之外维护的。其他被认为对 Pg 非常重要的工具也是如此,例如 PgBouncer、pgbarman、repmgr、PgAgent-III、Slony-I、Bucardo、Skytools/Londiste 等等。

一般来说,我建议在工作 .NET 时使用 nPgSQL 而不是 psqlODBC。nPgSQL 支持 ADO.NET 和 Entity Framework,因此您无需更改大量内容即可直接使用它。

于 2013-04-16T10:47:37.827 回答