相同的代码,不同的系统和不同的数据类型解释

本文关键字:数据类型 解释 代码 系统 | 更新日期: 2023-09-27 18:03:13

我有一个数据库,模式是创建的,我从excel中导入数据(他们从SQL Server数据库导出数据为excel格式)

我正在运行SQL Server 2008R2 +更新他们正在运行SQL Express 2008 R2

问题是,在我的系统上,我正在使用。net读取值。十进制类型的特定列实际上应该是double(不幸的是在生产中无法更改)

对于特定的数据集,该列的值为"0"

在我这边,我使用GetDouble读取数据,这很好-它给我"0.0"(即使存储在表中的实际值是"0")

对于

,他们得到一个错误,说不能将其强制转换为正确的类型。读取时得到的值是"0"

这怎么可能?我的意思是,完全相同的代码,相同的数据库类型,相同的数据,但读取方式不同?

我不知道如何去修复这个或在哪里看为什么阅读是不同的两个数据库?

我很感激你的帮助。

我使用存储过程,如果它有助于(虽然它不应该)读取数据和使用SqlDataReader类读取传入的数据。

下面是我用来从SqlDataReader读取数据的代码:

DedicatedResourceAssetCount = reader.IsDBNull(reader.GetOrdinal("dedicated resource asset count")) ? null : new Nullable<double>(reader.GetDouble(reader.GetOrdinal("dedicated resource asset count")))

和更多类似于上面的属性。在我的机器上,存储在DB中的字段是0,当阅读器读取它时,它是0.0在他们的机器上,存储在DB中的字段是0,当阅读器读取它时,它是0,当然,抛出InvalidCastException。

相同的代码,不同的系统和不同的数据类型解释

从长远来看,两个系统对浮点数的解释不同。在许多文化中,点用作小数分隔符,但在其他文化中,则使用逗号:

    0.0
  • 0, 0

第二个数字是由两个整数0组成的逗号分隔列表还是浮点数0.0?"我的"answers"他们的"系统可能使用不同的文化来解释您所得到的意外结果。

但是,只有当系统中存在某种形式的从文本到数字的转换时,文化才应该影响数字的解释。从您的解释看来,您正在查询数据库,如果列类型是浮点数,小数分隔符应该无关紧要。

但是,您可以检查一下您的系统和系统中的数据,寻找与文化有关的问题。

更深入地了解你的问题的细节,似乎"他们的"系统经历的错误是reader.GetDouble抛出InvalidCastException。这意味着存储在"their"数据库中的数据具有与"my"数据库不同的模式,并且列不包含预期的双精度浮点数。您已经清楚地说明了情况并非如此,但要找到错误的根源,您必须继续寻找"my"answers"their"系统之间的意外差异,以解释您得到的异常。

我确实不喜欢的工作似乎如下:

object value = reader.GetValue(reader.GetOrdinal("column"));
double returnResult = Convert.ToDouble(value.ToString());

它似乎可以工作,但仍然奇怪为什么它在我的系统上的原始代码中工作得很好。