Decimal通过TableAdapter从C#错误地传递到SQL Server

昨天我注意到使用TableAdapter时出现奇怪的行为,出于某种原因,当传递小数<0.1时,它会使它成为一个整数。 例如,如果我传递1.0123,我可以在SQL事件探查器中看到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)

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

我按照您的步骤使用SQL事件探查器中的默认跟踪能够在SQL 2008 R2上进行回购。

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

在此处输入图像描述