何谓精度:最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。
小数位数:小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。
在c sharp中调用传递SqlParameter参数时也需要制定参数的精度和小数的位数,如下面的例子声明一个精度为18小树位数为2的decimal类型参数:
SqlParameter parm = new SqlParameter("@parmName", SqlDbType.Decimal);
parm.Precision = 18;
parm.Scale = 2;
Dim RSParm As SqlParameter = Adapter.UpdateCommand.Parameters.Add("@RSGrowth", SqlDbType.Decimal, 18, "RSGrowth")
Dim RmRevParm As SqlParameter = Adapter.UpdateCommand.Parameters.Add("@RmRevGrowth", SqlDbType.Decimal, 18, "RmRevGrowth")
With Adapter.UpdateCommand.Parameters
.Add("@ID", SqlDbType.Int, 10, "ID").SourceVersion = DataRowVersion.Original
RSParm.Precision = 18
RSParm.Scale = 15
RSParm.SourceVersion = DataRowVersion.Current
RmRevParm.Precision = 18
RmRevParm.Scale = 15
RmRevParm.SourceVersion = DataRowVersion.Current
.Add("@ModifiedBy", SqlDbType.Int, 5, "ModifiedBy").SourceVersion = DataRowVersion.Current
.Add("@ModifiedDate", SqlDbType.DateTime, 22, "ModifiedDate").SourceVersion = DataRowVersion.Current
- Input value is 99.9:
========================================================================
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO [NumericTest] VALUES (@ID, @NumericValue)", conn);
SqlParameter p1 = new SqlParameter("ID", SqlDbType.Int);
SqlParameter p2 = new SqlParameter("NumericValue", SqlDbType.Decimal);
p1.Value = 2;
p2.Precision = 3;
p2.Scale = 0;
p2.Value = 99.9;
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
int result = cmd.ExecuteNonQuery();
}
,new SqlParameter("@Password", SqlDbType.Decimal,18,ParameterDirection.Input,true,9,2,"",DataRowVersion.Current,model.Password)//