iT邦幫忙

0

C#刪除DB資料時忽略錯誤

KK 2022-12-09 17:23:301480 瀏覽
  • 分享至 

  • xImage

小弟我有C#的問題想請教一下各位大神
假設我今天有個十筆資料要刪除
我將它存放在一個list裡 如下

foreach(var item in list){
    var sql= (sql的delete語法)
    SqlCommand cmd = new SqlCommand(sql, _conn);
    cmd.ExecuteNonQuery();
}

假設我跑到第五筆的時候 刪除遇到錯誤 我要如何忽略這筆繼續處裡下一筆@@ ((會錯誤是因為這筆資料和其他table有關連
我試過try catch ((跳到catch 不知道怎麼回tryXD
不加try catch (遇到錯誤程式會直接停掉
還是說有方法可以在SQL語法執行前 先判斷SQL執行是否會成功@@
查不太該怎麼做
再麻煩各位帥哥美女幫幫忙了

KK iT邦新手 5 級 ‧ 2022-12-09 17:48:15 檢舉
已解決~在foreach中塞 try catch XD
ntustzeus iT邦新手 2 級 ‧ 2022-12-20 09:48:24 檢舉
表裡有foreign key所以刪不掉?
這樣應該要看一下cascade設定成啥,不然下層對不到東西也是會出問題…
你應該交給storedProcedure 去處理這個刪資料的事,你的程式只要去exec sp_XXXX
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2022-12-24 01:57:48
最佳解答

在foreach中塞 try catch的作法:

foreach(var item in list){
    try{
        var sql= (sql的delete語法)
        SqlCommand cmd = new SqlCommand(sql, _conn);
        cmd.ExecuteNonQuery();
    }
    catch{
        // 當執行刪除操作時發生錯誤時,跳過這筆資料並繼續處理下一筆
        continue;
    }
}

在SQL語法執行前 先判斷SQL執行是否會成功的作法:

foreach(var item in list){
    try{
        var sql= @"BEGIN TRY
                    DELETE FROM MyTable WHERE Id = @Id
                 END TRY
                 BEGIN CATCH
                    RAISERROR('Error deleting record', 16, 1)
                 END CATCH";
        SqlCommand cmd = new SqlCommand(sql, _conn);
        cmd.Parameters.AddWithValue("@Id", item.Id);
        cmd.ExecuteNonQuery();
    }
    catch(SqlException ex){
        // 當執行刪除操作時發生錯誤時,跳過這筆資料並繼續處理下一筆
        continue;
    }
}

參考SQL Server 的 RAISERROR 語法
https://learn.microsoft.com/zh-tw/sql/t-sql/language-elements/raiserror-transact-sql?view=sql-server-ver16

0
PPTaiwan
iT邦好手 1 級 ‧ 2022-12-12 10:21:15

這寫法很怪!!

  1. 以一般寫法不管刪除多少資料只有有錯應該全部都要停止並找出錯誤,你這做法是〔刪不乾淨〕也沒有關係。

  2. 不管如何也應該下達〔程序交易處理〕才是正確的方法之一,不是下 Try Catch 來防止程式出問題卻不用交易來處理問題。

KK iT邦新手 5 級 ‧ 2022-12-12 16:17:33 檢舉

目前的情況就是 刪不乾淨也沒關西 @@
可能10筆裡面有1筆是刪不掉的 另外9筆都照常刪掉沒關西

我要發表回答

立即登入回答