在.net中操作數據庫的時候,我們更多的是推薦使用參數化來傳值,但這其中就會產生一些疑惑,比如使用Decimal時如何保持與數據庫中一樣的精度與小數位數呢?
利用參數的Precision與Scale的屬性即可,示例如下:
///<summary >
///更新一條數據
///</summary >
public DictionaryEntry Update_DictionaryEntry(SDERP.Model.storehouse.Storage_GoodsUnitExchange model)
{
……
SqlParameter[] parameters = {
new SqlParameter("@ID", SqlDbType.Int,4),
new SqlParameter("@GID", SqlDbType.VarChar,50),
new SqlParameter("@ChangeRate", SqlDbType.Decimal,13)
};
parameters[0].Value = model.ID;
parameters[1].Value = model.GID;
parameters[2].Value = model.ChangeRate;
parameters[2].Precision = 28;
parameters[2].Scale = 10;
return new DictionaryEntry(strSql, parameters);
}
這樣,我們就指定了"@ChangeRate"參數的精度為28,最大小數位數為10。
注意:其實在.net中,如果沒有特殊的情況,我們並不需要為參數設置精度與小數位數,在默認的情況下,參數會如實的傳遞用戶的值,並不會像數據庫一樣如果不設置小數位數,那么小數位數就是0。而且如果在程序中設置了精度與小數位數,那么在后期的程序的修改中也會帶來很大的工作量,試想一下,如果我們在此 處不設置,那么以后要改變decimal的小數位數,只要改掉數據庫中對應的字段長度就行了,而程序不用做任何改更。而如果我們在程序中也設置了小數位 數,那么在改了數據庫同時還得修改程序。
