为了账号安全,请及时绑定邮箱和手机立即绑定

将小于 0.1 的小数从 C# 传递到 SQL - SQL Profiler 解释问题

将小于 0.1 的小数从 C# 传递到 SQL - SQL Profiler 解释问题

C#
胡说叔叔 2023-09-16 17:32:24
当我从 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) NULLAS            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。
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

什么版本的EF?我无法使用简单的基于 EF6 EDMX 的数据库优先模型来重现这一点。


添加了这个过程:


CREATE PROCEDURE [dbo].[Insert]  

 @Value[decimal](18, 6) NULL

AS            

BEGIN            

        Select @Value  -- this would give `33` when passed `0.0033M` From C#      

END

添加了数据库优先模型,生成


public virtual ObjectResult<Nullable<decimal>> Insert(Nullable<decimal> value)

{

    var valueParameter = value.HasValue ?

        new ObjectParameter("Value", value) :

        new ObjectParameter("Value", typeof(decimal));


    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<decimal>>("Insert", valueParameter);

}

并跑:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace ConsoleApp24

{

    class Program

    {

        static void Main(string[] args)

        {

            using (var db = new aEntities())

            {

                var result = db.Insert(0.0033M);

                Console.WriteLine(result.First().Value);

                Console.ReadKey();

            }

        }

    }

}

输出是


0.003300


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信