c# - 使用 TableAdapters 将小数从 C# 错误地传递到 SQL Server

标签 c# sql-server-2008 tableadapter

昨天,我在使用 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. 创建一个新项目并添加一个新的数据集文件 SampleDataset.txt。添加一个新的 TableAdapter 并将 DecimalParametersSelect 添加为 Select 过程(它应该是您的数据库中唯一的一个)。

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

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

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

最佳答案

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

我按照您的步骤进行操作,并能够使用 SQL 探查器中的默认跟踪在 SQL 2008 R2 上进行存储。

但是,当跟踪属性更改为包含 TextDataRPC:Completed 的专栏,显示正确的命令。

enter image description here

关于c# - 使用 TableAdapters 将小数从 C# 错误地传递到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845012/

相关文章:

c# - .NET - System.Collections.Immutable 某处是否有单向链表?

c# - 在 C# 中引发事件并在 C++ MFC 中捕获

c# - f# 和 c# 获得基础数学的不同答案

sql - 如何使用 SQL 中的用户定义函数返回记录数?

c# - 当传递具有修改行的 DataRow 集合时,更新需要有效的 UpdateCommand

c# - 用于 MS 图表控件的鼠标滚轮滚动事件

sql - sql server 2008中可以有数组类型数据吗

sql - 报告服务: Use procedure as dataSet?

mysql - Tableadapter.Update 无法搜索要更新的行

MySQL 查询 - 使用前后通配符和输入参数进行搜索。 Visual Studio 2012 - VB.NET