将 SQL-DOUBLE 列读取为原始数据

问题描述 投票:0回答:1

我将数据定义为双精度保存在 PSQL 数据库(Actian)中,并且我正在使用 DbDataReader 来读取值。我知道我可以使用 GetDouble 读取该值,但我想将原始值读入字节数组。 GetBytes 方法返回时会出现 InvalidCastException,因为它设计为与 BLOB 或 VARBINARY 一起使用。有没有其他方法,比如读取整个数据缓冲区?

c# sql asp.net
1个回答
0
投票

嗯,有点奇怪的要求。

我可以看到需要将 int、long 或 bigint,甚至无符号整数值转换为字节数组。甚至可能是压缩十进制数,理论上它是非浮点数。

但是,我不太确定将 IEEE 浮点数转换为 8 字节数组是否有意义?

我想不出有哪个软件系统会乐意消耗这样的浮点值。

但是,使用 BitConverter 应该可以。

我没有安装 PostgreSQL 提供程序,但使用 SQL Server,这看起来对我来说工作得很好:

        string strSQL =
            @"SELECT HotelPrice FROM tblHotelsA WHERE ID = 10";

        DataTable dt = new DataTable();

        using (SqlConnection conn= new SqlConnection(Properties.Settings.Default.MyDB))
        {
            using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
            {
                conn.Open();
                dt.Load(cmdSQL.ExecuteReader());
            }
        }

        double myDouble = (double)dt.Rows[0]["HotelPrice"];

        byte[] MyDoubleArray = BitConverter.GetBytes(myDouble);

上面的结果是一个8字节长的字节数组。

因此,将 SQL 提供程序替换为 PostgreSQL 提供程序,发布的代码应该可以很好地满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.