我将数据定义为双精度保存在 PSQL 数据库(Actian)中,并且我正在使用 DbDataReader 来读取值。我知道我可以使用 GetDouble 读取该值,但我想将原始值读入字节数组。 GetBytes 方法返回时会出现 InvalidCastException,因为它设计为与 BLOB 或 VARBINARY 一起使用。有没有其他方法,比如读取整个数据缓冲区?
嗯,有点奇怪的要求。
我可以看到需要将 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 提供程序,发布的代码应该可以很好地满足您的需求。