我糾結的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便可,不然回滾。

相關文章
相關標籤/搜索