gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:11:56 25 4
gpt4 key购买 nike

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

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

问题是,在我的系统上,我正在使用 .NET 读取值。 decimal 类型的特定列实际上应该是 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")))

还有很多与上述类似的属性。在我的机器上,存储在数据库中的字段是 0,当读者读取它时,它是 0.0在他们的机器上,存储在数据库中的字段是 0,当读者读取它时,它是 0,但当然会抛出 InvalidCastException。

最佳答案

远景是 float 在两个系统上的解释不同。在许多文化中,点用作小数点分隔符,但在其他文化中使用逗号:

  • 0.0
  • 0,0

第二个数字是两个整数零的逗号分隔列表还是 float 0.0? “我的”和“他们的”系统可能会使用不同的文化来解释您的意外结果。

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

不过,您仍然可以查看您的系统和系统中的数据,并查找与文化相关的问题。

更深入地了解您的问题的细节,“他们的”系统体验的错误似乎是 reader.GetDouble 抛出 InvalidCastException。这意味着存储在“他们的”数据库中的数据具有不同于“我的”数据库的另一个模式,并且该列不包含预期的 double float 。您已经清楚地表明情况并非如此,但要找到错误的根源,您必须继续寻找“我的”和“他们的”系统之间的意外差异来解释您遇到的异常。

关于c# - 相同的代码,不同的系统和不同的数据类型解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23652894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com