昨天,我在使用 TableAdapters 时注意到了一个奇怪的行为,由于某种原因,当传递一个 < 0.1 的小数时,它会将其转换为整数。例如,如果我传递 1.0123,我可以在 SQL Profiler 中看到 1.0123,但如果我传递 0.0123,我将得到 123。是否存在已知问题?您可以执行以下步骤来重现该问题:
新建数据库TestDatabase,并创建以下存储过程
create proc DecimalParametersSelect ( @Foo decimal(10,5) ) as select @Foo
创建一个新项目并添加一个新的数据集文件 SampleDataset.txt。添加一个新的 TableAdapter 并将 DecimalParametersSelect 添加为 Select 过程(它应该是您的数据库中唯一的一个)。
运行您的项目并尝试选择一些数据,例如
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 上进行存储。
但是,当跟踪属性更改为包含 TextData
时RPC:Completed
的专栏,显示正确的命令。
关于c# - 使用 TableAdapters 将小数从 C# 错误地传递到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845012/