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

时间:2013-04-15 15:15:08

标签: function postgresql unicode ado.net odbc

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

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

1 个答案:

答案 0 :(得分:1)

psqlODBC使用较少,维护次数少于nPgSQL。

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

一般情况下,我建议在使用.NET时使用nPgSQL而不是psqlODBC。 nPgSQL支持ADO.NET和Entity Framework,因此您不必更改吨直接使用它。