aspx页面获取金额decimal,录入数据库字段decimal(18,2),转换错误:执行存储过程UP_JBXX_SJXXB_ADD错误:将数据类型 numeric 转换为 numeric 时出错。-----发生在.Net SqlClient Data Provider数据库字段 WPJE decimal(18,2),大小:9;精度:18;小数位:2
try { model.JYJE = Convert.ToDecimal(txtjyje.Text); }
catch { model.JYJE = 0.00m; }
SqlParameter[] parameters = {new SqlParameter("@WPJE", SqlDbType.Decimal,9)};
//parameters[0].Precision = (byte)18; //这里加上这两句也不行,size值变大 20也不行
//parameters[0].Scale = (byte)2;
parameters[0].Value = model.WPJE; //执行存储过程....... 这里报错
对于这个错误:调试的方法。数据库字段手动赋值,最多能输入整数位16位:9876543210123456.56;
页面录入值9876543210123456.56,程序跟踪也没有错,只是进入数据库转换错误。最后,页面输入能保存的数值是:1234567、12345667.55;整数位为7位,多了就报原先的转换错误。
实在搞不懂,数值范围C#、sql没错,为什么转换就报错。求大家们帮忙!求正解!!!
try { model.JYJE = Convert.ToDecimal(txtjyje.Text); }
catch { model.JYJE = 0.00m; }
SqlParameter[] parameters = {new SqlParameter("@WPJE", SqlDbType.Decimal,9)};
//parameters[0].Precision = (byte)18; //这里加上这两句也不行,size值变大 20也不行
//parameters[0].Scale = (byte)2;
parameters[0].Value = model.WPJE; //执行存储过程....... 这里报错
对于这个错误:调试的方法。数据库字段手动赋值,最多能输入整数位16位:9876543210123456.56;
页面录入值9876543210123456.56,程序跟踪也没有错,只是进入数据库转换错误。最后,页面输入能保存的数值是:1234567、12345667.55;整数位为7位,多了就报原先的转换错误。
实在搞不懂,数值范围C#、sql没错,为什么转换就报错。求大家们帮忙!求正解!!!
解决方案 »
- SQL注入?还是其他问题。。。
- asp.net里面怎么实现让整个页面的所有控件属性全部为enable=false
- asp.net怎么实现购物车功能并能实现在线支付
- 郁闷:有时出错,可刷新又好了
- GridView自定义控件的传值为空怎么解决?(看孟子E章的一篇文章有问题)在线等!!!
- B/S结构中,有无通过扫码枪扫码的可能?
- 菜鸟请教:如何简化这段代码?
- 非常高难的问题!<%#imgshow( DataBinder.Eval(Container.DataItem."img") ).ToString()%>如何限定这个函数显示时间最新的一个img。如能
- DataGrid传递中文参数的问题
- 关于DropDownList的怪问题?
- ckeditor重新绑定之后获取不到值是怎么回事
- Linq怎么读取某一个XML元素节点值
把它定死了为9位,检查一下。
数据库是2005 ,size 9,是不可以改的。
参数声明和赋值一起
SqlParameter[] parameters ={new SqlParameter("@WPJE", SqlDbType.Decimal,20,ParameterDirection.Input,true,18,2,"WPJE",DataRowVersion.Default,model.WPJE)}
构造函数中的size改到20,应该足够大了吧。跟踪调试,数值到参数赋值一步:parameters[0].Value = model.WPJE; 值是完全正确的。
现在能出现的问题应该是在两个地方:1.参数"@WPJE",精度和大小的问题 2.入库,系统自动转换 3.存储过程参数接收现在发现问题所在了:接收的存储过程参数定义错误。别人写的是numeric(9,2),精度小了。所以和SqlParameter[] parameters = {new SqlParameter("@WPJE", SqlDbType.Decimal,9)};这里的9没有关系,这个是大小值,不是精度。
为什么整数位最多只能输入7位,因为数据库接收参数定义的是numeric(9,2),有效位9位(sql中numeric 和 decimal 用法大致相同【未细区分过,讲错了请纠正】),那么整数位自然是7位,所以会报“将数据类型 numeric 转换为 numeric 时出错”
怎么就纳闷呢,原先的理论是正确的。