将.NET Double.MinValue插入Access"Double"字段

Sil*_*vic 6 .net ms-access

我试图使用adodb将我的.NET项目中的一些双值保存到MS Access.如果我有未初始化的值,我想将Double.MinValue作为默认值保存到我的访问数据库中.

问题是.NET和Access中的范围不同.例如,对于.NET,minvalue是

-1.79769313486232e308

对于MS Access,minvalue是

-1.79769313486231E308

任何人都可以告诉我为什么会有差异,因为两者都使用8个字节...或者我的问题是否有任何解决方法.我想确保我的用户能够使用全系列的Double.因为他们不会知道他们"不被允许"使用Double.MinValue ......

提前感谢您的帮助!

Gor*_*son 2

(请注意,这个原始答案是基于问题的前提,即 .NET 和 Access 中可用的最小 Double 值之间存在差异。正如问题所有者的其他答案所述,这实际上是不正确的。)

我的猜测是,这种差异只是一个模糊的实现细节。VBA/VB6 代码库比 .NET 代码库古老得多,构建 VBA/VB6 的人可能有

  • 遇到了(当时)环境的限制,导致他们无法将最后0.00000000000001的精度压缩到范围内,或者
  • 必须做出妥协(例如,为了计算、存储或其他方面的效率),而这种妥协的“代价”是范围Double被缩小了那么一点点。

软件设计有时需要权衡,所以最后一个可能0.00000000000001是为了其他好处而牺牲的。真正的答案可能会消失在时间的迷雾中。

编辑回复:其他答案中的陈述

似乎不可能通过sql语句发送Double.MinValue来访问。

虽然可能无法通过简单地调用来创建包含字符串文字的 SQL 语句,但此代码确实有效(使用 Access 2010 数据库进行测试):Double.MinValue.ToString()

using (var cmd = new OleDbCommand())
{
    cmd.Connection = con;
    cmd.CommandText = "INSERT INTO DoubleTest (DoubleField) VALUES (?)";
    cmd.Parameters.AddWithValue("?", Double.MinValue);
    cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)