首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Access 數據庫使用 OleDbParameter 批量刪除失敗的原因

     編輯:程式設計綜合問答

問題代碼

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 不會自動拆分字符串。

解決方案

  1. 拼接 SQL(注意注入):
string sql = "delete from ProductExcel where ID in (" + delID + ")";
// 需確保 delID 經過驗證為純數字
  1. 動態生成參數:
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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved