簡體   English   中英

十進制DbParameter上的精度問題

[英]precision problem on decimal DbParameter

在c#中,我使用十進制輸出DbParameter作為Sql Server存儲過程。 我創建這樣的參數


DbParameter prm = comm.CreateParameter();

prm.ParameterName = "@Price";

prm.DbType = DbType.Decimal;

prm.Direction = ParameterDirection.Output;

comm.Parameters.Add(prm);

//and set the value of comm.Parameters["@Price"] to a variable,

decimal.TryParse(comm.Parameters["@Price"].Value.ToString(), 
  out this.ProdPrice);

但是out參數的值總是四舍五入。

如果我從Sql Server Management Studio調用相同的存儲過程,我可以正確地得到這個out參數的精度

DbParameter上沒有精度或縮放屬性。 我必須在System.Data.Common命名空間上使用DbParameter來獲取數據

我怎樣才能以完全精確的方式來識別十進制值

提前致謝...

添加到Marc的建議,您可以將代碼更改為

IDbDataParameter prm = comm.CreateParameter();

其余代碼應該可以正常工作。 Precision和Scale屬性是DbParameter中的“顯式接口實現”。

您是否嘗試過設置精度比例 注意你需要先施放。

首先,您不需要解析字符串來獲取Decimal,您應該能夠直接轉換為它:

this.ProdPrice = (Decimal) comm.Parameters["@Price"].Value;

話雖如此,@ Price參數的精度是多少? 我相信SQL Server允許最多35個位置的精度,而Decimal類只能提供最多28個位置的精度,所以如果你的參數有超過28個位置,你將無法阻止舍入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM