【机房重构】SQL语句已终止
2015-07-15 20:05
417 查看
在下机将消费时间写入数据库时,出现了一个没有遇到过的错误,用了将近一下午的时间才改正过来,其实出错的原因也很简单。
“语句已终止”,首先想到的是自己没有那个能力将更新语句写成终止语句吧!思维往这个方向偏,就忽略了本身导致问题的原因。思维越来越偏,甚至怀疑是自己写的SQL语句导致数据库死循环了,真是脑洞大开。。。
SQL语句如下:
其实仔细看一看就能看到错误信息:将截断字符串或二进制数据。“将截断字符串或二进制数据。”说明添加到数据库的信息,有的字段已经超出了数据库里的长度被截断,或者是其中的类型出现了不匹配!其实怎样准确的找到调试过程中具体的错误,以前的博客里面已经有了叙述:《开启调错之旅》,这里就不再多加叙述。
这次字段超出范围的是消费时间,之前设置的是varchar(10)类型,长度太小,消费时间计算出的数值过大,导致了字符串被截断。当然,出现问题说明varchar类型没有自动修剪数据的功能,便将这个字段设置成了decimal类型。decimal可以根据设计数据库时设置的长度自动修剪数据,使数据保存时适应类型本身的长度,避免了数据过长被截断的错误。
虽然知道怎么改了,但是具体是怎么回事儿,却没有查到,还是需要大神指教的。
“语句已终止”,首先想到的是自己没有那个能力将更新语句写成终止语句吧!思维往这个方向偏,就忽略了本身导致问题的原因。思维越来越偏,甚至怀疑是自己写的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可以根据设计数据库时设置的长度自动修剪数据,使数据保存时适应类型本身的长度,避免了数据过长被截断的错误。
虽然知道怎么改了,但是具体是怎么回事儿,却没有查到,还是需要大神指教的。
相关文章推荐
- mysql之存储过程
- sql优化
- springmvc+mongodb+maven 项目搭建配置
- redis之sentinel
- SQL小结(三)
- redis实践
- Redis与Memcached的区别
- 数据库性能优化(MySQL)
- MySQL 运算符和函数
- SQL group by使用
- SQL常用方法整理
- 数据库查询并存放
- 第16/24周 SQL Server 2014中的基数计算
- mysql时间查询
- Mysql InnoDB行锁实现方式
- 转通过v$sqlarea,v$sql查询最占用资源的查询
- SqlServer 游标选项说明及测试
- The provider is not compatible with the version of Oracle client
- MVC操作SQL数据库增删改查
- (Hibernate3+)HQL转SQL