string delID = "17,18,19";
int num = sqlhelp.ExecuteNonQuery(
"delete from ProductExcel where ID in(@ID)",
new OleDbParameter("@ID", delID)
);
單個 ID 成功,多個 ID 失敗。
參數 @ID 被作為單個字符串值處理,SQL 變為:
delete ... where ID in ('17,18,19')
而非 ID in (17,18,19)。Access 不會自動拆分字符串。
string sql = "delete from ProductExcel where ID in (" + delID + ")";
// 需確保 delID 經過驗證為純數字
string[] ids = delID.Split(',');
var pars = new List<OleDbParameter>();
string inClause = string.Join(",", ids.Select((id, i) => {
var p = new OleDbParameter("@id" + i, id);
pars.Add(p);
return "@id" + i;
}));
string sql = "delete from ProductExcel where ID in (" + inClause + ")";
sqlhelp.ExecuteNonQuery(sql, pars.ToArray());
方案二較安全,適用於任意數量 ID。