Decimal通过TableAdapter从C#错误地传递到SQL Server
昨天我注意到使用TableAdapter时出现奇怪的行为,出于某种原因,当传递小数<0.1时,它会使它成为一个整数。 例如,如果我传递1.0123,我可以在SQL事件探查器中看到1.0123,但如果我传递0.0123,我将得到123.是否有已知问题? 您可以执行以下步骤来重现该问题:
-
创建一个新的数据库TestDatabase,并创建以下存储过程
create proc DecimalParametersSelect ( @Foo decimal(10,5) ) as select @Foo
-
创建一个新项目并添加一个新的DataSet文件SampleDataset。 添加一个新的TableAdapter并将DecimalParametersSelect添加为Select过程(它应该是数据库中唯一的一个)。
-
运行您的项目并尝试选择一些数据,例如
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:Completed
的TextData
列时,将显示正确的命令。