将.NET Double.MinValue插入Access“Double”字段

时间:2013-12-18 13:13:49

标签: .net ms-access

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

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

  

-1.79769313486232e308

对于MS Access,minvalue是

  

-1.79769313486231E308

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

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

好吧,我再次检查了一下,现在我必须意识到我在这里有错。 上面发布的数字是错误的。对于它的值

-1.7976931348623157e308. 

当我问这个问题时,我看到了一个不值得信任的消息来源。问题是,在将Double.MinValue转换为字符串时,结果字符串为“-1.79769313486232e308”并将其转换为double会导致OverflowException。

您可以使用以下代码段

进行测试
double dblVal = Double.MinValue;
string strVal = dblVal.ToString();
dblVal = Convert.ToDouble(strVal);

因此,我发送一个sql查询,以便将值存储在我正在进行此转换的访问中。

下次我应该更好地检查我的源代码(:似乎不可能通过sql语句发送Double.MinValue来访问。我在AccessInterface中做了一个解决方法。

答案 1 :(得分:2)

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

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

  • 达到了一个环境限制(当时),阻止他们将最后0.00000000000001精度压缩到范围内,或者
  • 必须做出妥协(例如,为了计算,存储或其他方面的效率),并且该折衷的“价格”是Double范围减少了这个微不足道的数量。

软件设计有时需要权衡利弊,所以也许最后0.00000000000001被牺牲用于其他一些好处。真正的答案可能会在时间的迷雾中消失。

编辑re:其他答案中的陈述

  

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

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

.ToString()