【问题标题】:Decimal passed incorrectly from C# to SQL Server with TableAdapters使用 TableAdapters 将小数从 C# 错误地传递到 SQL Server
【发布时间】:2012-08-07 11:30:27
【问题描述】:

昨天我在使用 TableAdapters 时注意到一个奇怪的行为,由于某种原因,当传递一个小于 0.1 的小数时,它会变成一个整数。例如,如果我通过 1.0123,我可以在 SQL Profiler 中看到 1.0123,但如果我通过 0.0123,我将得到 123。是否存在已知问题?您可以执行以下步骤来重现问题:

  1. 新建一个数据库TestDatabase,并创建如下存储过程

    create proc DecimalParametersSelect
    (
        @Foo decimal(10,5)
    )
    
    as
    
    select @Foo
    
  2. 创建一个新项目并添加一个新的 DataSet 文件 SampleDataset.添加一个新的 TableAdapter 并将 DecimalParametersSelect 添加为 Select 过程(它应该是您数据库中唯一的一个)。

  3. 运行您的项目并尝试选择一些数据,例如

    using (SampleDatasetTableAdapters.DecimalParametersSelectTableAdapter dta = new SampleDatasetTableAdapters.DecimalParametersSelectTableAdapter())
    {
        var table = dta.GetData(0.01588M);
    }
    

在分析器中,您应该看到传入的值是 1588(有趣的是,返回的值在 C# 中被正确识别为 0.01588)

【问题讨论】:

  • 那么什么是 DecimalParametersSelectTableAdapter ? Is 似乎不是 .Net 基类库的一部分。
  • 无法重现 - 我在分析器中看到 0.01588(VS2012RC,SQL Server 2012)
  • 看起来可能是 2008 年特有的

标签: c# sql-server-2008 tableadapter


【解决方案1】:

TextData 列未包含在跟踪中并且RPC 命令的文本是从另一个来源(可能是BinaryData)重建时,这似乎是SQL Profiler 中的一个显示错误。

我按照您的步骤操作,并且能够使用 SQL 分析器中的默认跟踪在 SQL 2008 R2 上进行回购。

但是,当跟踪属性更改为包含 RPC:CompletedTextData 列时,会显示正确的命令。

【讨论】:

  • 就是这样。我实际上偶然发现了它追逐不同的错误,我认为这两者是相关的。看来我得继续找了。谢谢你的帮助。
猜你喜欢
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多