小弟我有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執行是否會成功@@
查不太該怎麼做
再麻煩各位帥哥美女幫幫忙了
在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
這寫法很怪!!
以一般寫法不管刪除多少資料只有有錯應該全部都要停止並找出錯誤,你這做法是〔刪不乾淨〕也沒有關係。
不管如何也應該下達〔程序交易處理〕才是正確的方法之一,不是下 Try Catch 來防止程式出問題卻不用交易來處理問題。