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

来源:互联网 发布:linux informix 安装 编辑:程序博客网 时间:2024/06/03 02:03

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

                                       

        “语句已终止”,首先想到的是自己没有那个能力将更新语句写成终止语句吧!思维往这个方向偏,就忽略了本身导致问题的原因。思维越来越偏,甚至怀疑是自己写的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可以根据设计数据库时设置的长度自动修剪数据,使数据保存时适应类型本身的长度,避免了数据过长被截断的错误。
        虽然知道怎么改了,但是具体是怎么回事儿,却没有查到,还是需要大神指教的。
0 0
原创粉丝点击