我纠结的sql返回受影响行数与判断是否成功的问题
2015-08-25 15:41
323 查看
比如:deleteSQLWhere="delete TableA where ID in(1,2,3,4,5)";
假如in里的ID全部存在,一般情况下,结果会是三种情况:
返回0,表示TableA没有in里的ID,所以执行失败。
返回5,表示成功删除5条数据。
由于表约束或主外键关联,导致无法删除的异常。还有语法错误。
如果是这样的话,上面的代码判断是正确的。我在怀疑有没有一种情况,比如说"delete TableA where ID in(1,2,3,4,5)",假设in里的数据存在且没有主外键关联等因素制约,会不会出现一部分执行成功,而另外一部分执行失败的情况呢?
假如这样的话,ADO.Net上对sql的执行结果判断就不严谨了。因为上面那段代码的本意是:这5条数据要么全部被删除,要么全部没有被删除,此时i>0就不能表示这个意思了。
我不知道,sql的执行机制是怎样的,没有深入学习数据库,我基本停留在增删改的阶段。所以也不知道像上面的一条语句,是不是要么成功要么失败的,类似事务的处理结果。
我的倾向应该是要么成功,要么失败的。
要不然判断的时候,i==想要执行的数据个数,这样就太麻烦了。而且很多业务是不知道要执行的数据个数的,此时在执行update和delete语句之前先查出来有多少条数据,就更麻烦了,一大堆的问题。
我冒死去Q群去问这个问题,结果只是被鄙视了好多次而已,道理也说了一大堆,然后就是自己去体会吧之类的话了。然并卵,我也不知道问谁了,又不认识这方面的专家,虽然这个是个那么不起眼的问题。
-------------------------------------------------------------------------------------
哦,有一个是可以确定的,就是在C#执行方法的sql语句参数里,写上两条sql语句,比如"update TableA set AID=2 where ID=3;delete TableB where ID=3;"。返回受影响行数>0判断为成功,显然是错误的。
这里推荐用事务,但用事务的时候可以两条语句合起来写,但判断的时候i==2即可,否则回滚。
try { int i = sqlHelper.ExecuteNonQuery(CommandType.Text, deleteSQLWhere); if (i > 0) { return true; } } catch (Exception ex) { LogMsg.WriteLog(ex.ToString()); return false; } return false;
假如in里的ID全部存在,一般情况下,结果会是三种情况:
返回0,表示TableA没有in里的ID,所以执行失败。
返回5,表示成功删除5条数据。
由于表约束或主外键关联,导致无法删除的异常。还有语法错误。
如果是这样的话,上面的代码判断是正确的。我在怀疑有没有一种情况,比如说"delete TableA where ID in(1,2,3,4,5)",假设in里的数据存在且没有主外键关联等因素制约,会不会出现一部分执行成功,而另外一部分执行失败的情况呢?
假如这样的话,ADO.Net上对sql的执行结果判断就不严谨了。因为上面那段代码的本意是:这5条数据要么全部被删除,要么全部没有被删除,此时i>0就不能表示这个意思了。
我不知道,sql的执行机制是怎样的,没有深入学习数据库,我基本停留在增删改的阶段。所以也不知道像上面的一条语句,是不是要么成功要么失败的,类似事务的处理结果。
我的倾向应该是要么成功,要么失败的。
要不然判断的时候,i==想要执行的数据个数,这样就太麻烦了。而且很多业务是不知道要执行的数据个数的,此时在执行update和delete语句之前先查出来有多少条数据,就更麻烦了,一大堆的问题。
我冒死去Q群去问这个问题,结果只是被鄙视了好多次而已,道理也说了一大堆,然后就是自己去体会吧之类的话了。然并卵,我也不知道问谁了,又不认识这方面的专家,虽然这个是个那么不起眼的问题。
-------------------------------------------------------------------------------------
哦,有一个是可以确定的,就是在C#执行方法的sql语句参数里,写上两条sql语句,比如"update TableA set AID=2 where ID=3;delete TableB where ID=3;"。返回受影响行数>0判断为成功,显然是错误的。
这里推荐用事务,但用事务的时候可以两条语句合起来写,但判断的时候i==2即可,否则回滚。
相关文章推荐
- sql存储过程详解
- Mysql中文乱码问题
- Redis在win7上的可视化应用
- 关于mysql has gone away的解决办法
- sql基础
- mysql空间扩展 VS PostGIS
- mongodb连接参数
- 8.3.1 How MySQL Uses Indexes MySQL 如何使用索引
- MySQL在大型网站的应用架构演变
- ibatis如果查看动态sql语法正确,但是没有返回值问题定位
- Window7 64位旗舰版 安装Oracle 11gR2 安装图解
- 使用spring-data-redis操作Redis的Sentinel
- LINUX oracle dbca无法启动
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- asp.net link oracle
- SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)
- oracle中字符串的操作
- asp.net link oracle error ORA-06413: 连接未打开
- oracle删除表空间后 再创建同名表空间报错 OSD-04010
- IOS 学习 数据库操作实例