十进制错误地传递从C#到SQL Server的TableAdapter(Decimal passed

2019-07-30 20:04发布

昨天我使用的TableAdapters时,由于某种原因,经过一个十进制<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作为选择程序(它应该是在你的数据库中只有一个)。

  3. 运行项目,并尽量选择一些数据,例如

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

在探查你应该看到,在传递的值是1588(有趣的是,返回值将在C#正确识别为0.01588)

Answer 1:

这似乎是一个显示错误在SQL探查时TextData不被包括在跟踪列和RPC命令的文本是从另一个源(大概重构BinaryData )。

我跟着你的脚步,并能够在SQL事件探查器使用默认跟踪上SQL 2008 R2来回购。

然而,当被改变跟踪属性以包括TextDataRPC:Completed时,显示正确的命令。



文章来源: Decimal passed incorrectly from C# to SQL Server with TableAdapters