您的位置:首页 > 数据库

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

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




“语句已终止”,首先想到的是自己没有那个能力将更新语句写成终止语句吧!思维往这个方向偏,就忽略了本身导致问题的原因。思维越来越偏,甚至怀疑是自己写的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可以根据设计数据库时设置的长度自动修剪数据,使数据保存时适应类型本身的长度,避免了数据过长被截断的错误。

虽然知道怎么改了,但是具体是怎么回事儿,却没有查到,还是需要大神指教的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: