Function 使用ADO.Net从PostgreSQL数据库检索数据;System.Data.Odbc”;(VB.Net)

Function 使用ADO.Net从PostgreSQL数据库检索数据;System.Data.Odbc”;(VB.Net),function,postgresql,unicode,ado.net,odbc,Function,Postgresql,Unicode,Ado.net,Odbc,在运行以下代码之后,我被要求对PostgreSQL进行一些研究 当我们读取DBDataReader对象时,系统返回两个条目(未命名门户1和未命名门户2), 但是,我希望读取这两个门户的所有记录,然后将信息加载到我的业务对象中,因为每个门户在表中有5条以上的记录 在浏览了互联网上的各种页面后,我发现有一个第三方库(“NpgSQL”>NpgsqlDataReader)提供 此功能是免费的。我已经将他们的库插入到我的解决方案中,它按照预期工作。然而, 我不想使用这个第三方软件,只是想知道是否有办法从这

在运行以下代码之后,我被要求对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)


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

PSQLDBC比nPgSQL使用更少,维护更少

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


一般来说,我建议在处理.NET时使用nPgSQL而不是PSQLDBC。nPgSQL支持ADO.NET和实体框架,因此您不必更改tons来直接使用它。

PSQLDBC比nPgSQL使用更少,维护更少

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


一般来说,我建议在处理.NET时使用nPgSQL而不是PSQLDBC。nPgSQL支持ADO.NET和实体框架,因此您不必更改tons来直接使用它。

如果您使用C,我强烈建议您使用nPgSQL。它的支持比PSQLDBC好得多,并且与PSQLDBC本身相比,它不再是“第三方”。它们都是PostgreSQL核心之外的项目,由不同的团队维护。顺便说一句,谢谢你提出的好问题,谢谢克雷格的意见。我必须承认一个错误,因为我已经在我的解决方案中使用npgSQL库,并且在这个问题中错误地写了“PostgreSQL Unicode”。谢谢Craig的输入
我已经成功地在我的解决方案中实现了npgSQL库,它似乎工作得很好。必须在我的数据访问层(DAL)中进行一些更改,因为您可能已经注意到,我们正在使用DBProviderFactorys建立两个不同数据库(SQL Server和PostgreSQL)的连接
关于您对详细问题的理解,我认为这有助于其他开发人员了解开发环境和问题的性质。这可能会导致如何处理/解决问题的过程发生重大/彻底的变化。嗨,Craig,在阅读了您的个人资料信息后,您显然是最合适的人选,可以询问我们如何在PostGreSQL中处理数据库级别的记录分页?这里我所说的记录分页的意思是,假设数据库中有500条记录与客户相对,我一次只想得到50条记录。用户在表单上有一个导航控件,可以前后移动。我已经在SQL Server中开发了一个解决方案,但不确定如何在PostgreSQL中实现。非常感谢你的帮助。Thanks@AsfandIbqal最好针对新问题发布新问题。如果您不想重复所有背景,请链接回此链接。顺便说一句,我还没有把我的建议作为这个问题的答案,因为很有可能有人会像你问的那样,得到一个使用ODBC/ADO.NET的答案。另外,我并不是最合适的人选,我还没有对webapps做过很多工作,而且分页在最好的时候也是一件痛苦的事情。如果你使用C#,我强烈建议你使用nPgSQL。它的支持比PSQLDBC好得多,并且与PSQLDBC本身相比,它不再是“第三方”。它们都是PostgreSQL核心之外的项目,由不同的团队维护。顺便说一句,谢谢你提出的好问题,谢谢克雷格的意见。我必须承认一个错误,因为我已经在我的解决方案中使用npgSQL库,并且在这个问题中错误地写了“PostgreSQL Unicode”。谢谢Craig的输入
我已经成功地在我的解决方案中实现了npgSQL库,它似乎工作得很好。必须在我的数据访问层(DAL)中进行一些更改,因为您可能已经注意到,我们正在使用DBProviderFactorys建立两个不同数据库(SQL Server和PostgreSQL)的连接
关于您对详细问题的理解,我认为这有助于其他开发人员了解开发环境和问题的性质。这可能会导致如何处理/解决问题的过程发生重大/彻底的变化。嗨,Craig,在阅读了您的个人资料信息后,您显然是最合适的人选,可以询问我们如何在PostGreSQL中处理数据库级别的记录分页?这里我所说的记录分页的意思是,假设数据库中有500条记录与客户相对,我一次只想得到50条记录。用户在表单上有一个导航控件,可以前后移动。我已经在SQLServerH中开发了一个解决方案