当我从 C#传递值时,我无法将小于0.1正确值的十进制值从 C# 传递到 SQL,例如0.0033M我33在 SQL Profiler 中获得的十进制值
db.Insert(0.0033M);//SP Called from EDMX context `db` C#
当我检查SQL Profiler时,我得到
exec [dbo].[Insert] @Value=33 --Shouldn't it be 0.0033
但是当我传递任何大于等于0.1该值的值时,都会正确传递
如何将十进制值从 C# 正确传递到存储过程的十进制值?
这是我们的 SP,没关系,只是为了让事情更清楚,实际值是我们在前面提到的 Profiler 中收到的值
CREATE PROCEDURE [dbo].[Insert]
@Value[decimal](18, 6) NULL
AS
BEGIN
Select @Value -- this would give `33` when passed `0.0033M` From C#
END
修改:
我非常感谢Microsoft 的 David Browne的回答。正如他所说,这没有问题,传递价值也没有问题。但在我们进一步的调查中,我们确实发现SQL Profiler解释错误,而 SQL 和 C# 工作得很好。在这里我要提到的是,我们使用 ADO.net 和 Entity Framework 进行了测试,发现问题出在 SQL Profiler 的解释上,即当小于0.1通过时 SQL Profiler 显示值错误,它显示 0.01为1和0.077as77。我非常感谢每一位参与的人,但我也想在这里提到这一点,这是一种异常行为,SQL Profiler 没有提供预期的结果,因为对于许多调试场景,我们使用 SQL Profiler。
临摹微笑
相关分类