【机房重构】SQL语句已终止

        在下机将消费时间写入数据库时,出现了一个没有遇到过的错误,用了将近一下午的时间才改正过来,其实出错的原因也很简单。

                                       【机房重构】SQL语句已终止_第1张图片

         “语句已终止”,首先想到的是自己没有那个能力将更新语句写成终止语句吧!思维往这个方向偏,就忽略了本身导致问题的原因。思维越来越偏,甚至怀疑是自己写的SQL语句导致数据库死循环了,真是脑洞大开。。。
SQL语句如下:
//SQL更新命令语句
string cmdText = "Update Line Set OffLineTime=@OffTime,ConMoney=@Money,ConTime=@ConTime,Status=@Statu where CID=@CID and Status=@Status";
//参数
SqlParameter[] sqlParams={new SqlParameter("@ConTime",lineList[0].ConTime),
                                     new SqlParameter("@Money",lineList[0].ConMoney),
                                     new SqlParameter("@OffTime",dt),
                                     new SqlParameter("@CID",lineList[0].CID),
                                     new SqlParameter("@Statu",false),
                                     new SqlParameter("@Status",true)};  
         其实仔细看一看就能看到错误信息:将截断字符串或二进制数据。“ 将截断字符串或二进制数据。”说明添加到数据库的信息,有的字段已经超出了数据库里的长度被截断,或者是其中的类型出现了不匹配!其实怎样准确的找到调试过程中具体的错误,以前的博客里面已经有了叙述:《开启调错之旅》,这里就不再多加叙述。
         这次字段超出范围的是消费时间,之前设置的是varchar(10)类型,长度太小,消费时间计算出的数值过大,导致了字符串被截断。当然,出现问题说明varchar类型没有自动修剪数据的功能,便将这个字段设置成了decimal类型。decimal可以根据设计数据库时设置的长度自动修剪数据,使数据保存时适应类型本身的长度,避免了数据过长被截断的错误。
         虽然知道怎么改了,但是具体是怎么回事儿,却没有查到,还是需要大神指教的。

你可能感兴趣的:(【机房重构】SQL语句已终止)