2009-02-05 95 views
4

在c#中, 我使用一個十進制DbParameter作爲Sql Server存儲過程。 創建參數一樣,十進制精度問題DbParameter


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中的同一個存儲過程,我能得到這個出 參數正確與它的精度

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

哪有我能夠提前retieve十進制值與其全精度

謝謝...

回答

4

添加到馬克的建議,你可以更改代碼以代碼的

IDbDataParameter prm = comm.CreateParameter();

休息應該能正常運行。 精度和比例屬性是DbParameter中的「顯式接口實現」。

+1

IDbDataParameter DecimalOut = comm.CreateParameter(); DecimalOut.Direction = ParameterDirection.Output; DecimalOut.ParameterName =「@Price」; DecimalOut.DbType = DbType.Decimal; DecimalOut.Scale = 4; comm.Parameters.Add(DecimalOut); 正常工作.. 謝謝所有.. – 2009-02-05 01:32:52

1

第一,你不需要解析字符串得到小數,你應該能夠直接投給它:

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

話雖這麼說,什麼是@price參數的精度?我相信SQL Server允許精確到35個位置,而Decimal類只能提供高達28個位置的精度,所以如果你的參數超過28個位置,你將無法阻止舍入。

2

您是否嘗試過設置PrecisionScale?請注意,您需要先施放。