我纠结的sql返回受影响行数与判断是否成功的问题

好比:deleteSQLWhere="delete TableA where ID in(1,2,3,4,5)";  sql

           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条数据。spa

因为表约束或主外键关联,致使没法删除的异常。还有语法错误。code

 

若是是这样的话,上面的代码判断是正确的。我在怀疑有没有一种状况,好比说"delete TableA where ID in(1,2,3,4,5)"假设in里的数据存在且没有主外键关联等因素制约,会不会出现一部分执行成功,而另一部分执行失败的状况呢?blog

假如这样的话,ADO.Net上对sql的执行结果判断就不严谨了。由于上面那段代码的本意是:这5条数据要么所有被删除,要么所有没有被删除,此时i>0就不能表示这个意思了。事务

 

我不知道,sql的执行机制是怎样的,没有深刻学习数据库,我基本停留在增删改的阶段。因此也不知道像上面的一条语句,是否是要么成功要么失败的,相似事务的处理结果。it

个人倾向应该是要么成功,要么失败的。io

要否则判断的时候,i==想要执行的数据个数,这样就太麻烦了。并且不少业务是不知道要执行的数据个数的,此时在执行update和delete语句以前先查出来有多少条数据,就更麻烦了,一大堆的问题。class

 

我冒死去Q群去问这个问题,结果只是被鄙视了好屡次而已,道理也说了一大堆,而后就是本身去体会吧之类的话了。然并卵,我也不知道问谁了,又不认识这方面的专家,虽然这个是个那么不起眼的问题。

 

 

-------------------------------------------------------------------------------------

哦,有一个是能够肯定的,就是在C#执行方法的sql语句参数里,写上两条sql语句,好比"update TableA set AID=2 where ID=3;delete TableB where ID=3;"。返回受影响行数>0判断为成功,显然是错误的。

这里推荐用事务,但用事务的时候能够两条语句合起来写,但判断的时候i==2便可,不然回滚。

相关文章
相关标签/搜索