c#sql执行时,在向服务器发送请求时发生传输级错误。和,参数值“0.000000000000000000”超出范围。错误

 

sql部分

create table tbmodel1(
	id bigint primary key identity(1,1),
	about_id bigint ,
	price decimal(18,2) ,
)

  

c#代码

        public long Add(model1Model model) {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into tbmodel1(about_id,price) values (@about_id,@price);select @@IDENTITY");
            SqlParameter[] parameters = {
                    new SqlParameter("@about_id", SqlDbType.BigInt,8),
                    new SqlParameter("@price", SqlDbType.Decimal),
            };
            //foreach (var a in new int[] { 1 }) { parameters[a].Scale = 18; parameters[a].Precision = 2; }//原来错的
            foreach (var a in new int[] { 1 }) { parameters[a].Precision = 18; parameters[a].Scale = 2; }//对的,

            parameters[0].Value = model.about_id;
            parameters[1].Value = model.price;//参数值“0.000000000000000000”超出范围。???再看下,

	    object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);//执行sql返回最后更新的id,
            //报错:有一次是,在向服务器发送请求时发生传输级错误。,,,网上说改web.config的 Pooling=false,没用,
	    //报错:参数值“0.000000000000000000”超出范围。(这两个错误,有时是这个,有时是上面一个,有点奇怪,不知哪里控制)
            if (obj == null) {
                return 0;
            } else {
                return Convert.ToInt64(obj);
            }
        }

  

 


说明:
它在,DbHelperSQL.GetSingle()里,执行到, ExecuteScalar() 时,报错,查了半天(因为原来字段很多,现在简化了),
结果是Precision,和Scale的设置,给弄反了,

正确://new int[] { 1 },是 @price 的下标是1,如果有多个,这里就可以,new int[] { 1,3,6 ... } 之类的,
foreach (var a in new int[] { 1 }) { parameters[a].Precision = 18; parameters[a].Scale = 2; }//对的,

 

posted @ 2018-01-13 01:41  以函  阅读(517)  评论(0编辑  收藏  举报