亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將小于 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 關注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號