[英]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.