繁体   English   中英

在 VB.Net 中,为什么 OleDataReader GetDecimal() function 只返回 integer 部分?

[英]In VB.Net, why OleDataReader GetDecimal() function returns only integer part?

当我在VB.Net (Visual Studio 2019) 上运行以下代码时,得到 789,但从未收到 789.1234。 小数部分总是丢失!

Imports System.Data.OleDb

Dim cs = "Provider=PostgreSQL OLE DB Provider;" _
       & "DataSource=127.0.0.1;" _
       & "location=extraits;" _
       & "User ID=postgres;" _
       & "Password='Sp1r1tus'"

Dim oleconx = New OleDbConnection(cs)
Dim cmd = New OleDbCommand("SELECT 789.1234 as account", oleconx)
Dim rxSheet = cmd.ExecuteReader()
Dim n = rxSheet.GetOrdinal("account")
Dim dAccount = rxSheet.GetDecimal(n)

如果我使用以下代码也是一样的

Dim dAccount = rxSheet("account")

变量dAccount包含 789 ! 小数部分丢失!

在实际情况下(以前的代码只是解释问题的简单代码),我发现使用相同代码获得完整十进制数的唯一解决方案是更改 SQL SELECT 命令

SELECT account * 1000 as account

并编写以下 VB.Net 代码

Dim dAccount as Decimal = rxSheet("account") / 1000

但这是一种解决方法。

我刚刚使用标准 Setup exe 程序安装了 Postgres 14.1。 在此版本之前,我在 Windows 10 上的同一台 PC 上使用版本 8.4。也许某些 DLL 没有安装在正确的位置(如 libpq.dll)。

这个问题在 8.4 版本中已经存在。

一些身体可以帮助我吗?

我已经在 PostGres 上发布了这个错误,但他们回复如下

PostgreSQL 不提供内置的 OLE DB 提供程序。 您需要联系您的 OLE DB 驱动程序的作者。

我的问题有解决方案吗?

谁负责 PostGres 或 Microsoft?

我已经尝试过使用 Intellisoft OLEDB Provider for PostgreSQL (PGNP) 的场景,它按预期工作。 我不得不稍微更改连接字符串,并添加包含 rxSheet.Read() 的行。 这是工作代码的副本:

Dim cs = "Provider=PGNP.1;" _
            & "Data Source=127.0.0.1;" _
            & "Initial Catalog=postgres;" _
            & "User ID=postgres;" _
            & "Password=123!"

    Dim oleconx = New OleDbConnection(cs)
    oleconx.Open()
    Dim cmd = New OleDbCommand("SELECT 789.1234 as account", oleconx)
    Dim rxSheet = cmd.ExecuteReader()
    Dim n = rxSheet.GetOrdinal("account")
    While rxSheet.Read()
        Dim dAccount = rxSheet.GetDecimal(n)
        Console.WriteLine("dAccount={0}", dAccount)
    End While

结果如下:dAccount=789.1234

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM