You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#操作MS Access 97数据库按id_car年月条件执行删除无响应问题

问题根因

  • BETWEEN运算符不支持通配符*,你在查询条件末尾拼接的*会被Access识别为普通字符参与匹配,而你的id_car字段值末尾不存在*,因此不会匹配到任何数据,自然没有删除动作。
  • 直接拼接SQL语句存在SQL注入风险,同时容易因为变量格式不符导致查询逻辑失效,建议使用参数化查询优化。
  • 代码中声明的OleDbDataAdapter对象没有被实际使用,属于冗余代码可以直接删除。

修正方案

你的id_car字段前6位为「2位月份+4位年份」,可以用Access内置的LEFT()函数截取前6位做范围匹配,修正后的代码如下:

string MesePartenza = Mese1;
string MeseFinale = Mese2;
// 补全月份前导0,保证前缀统一为6位:XX(月份)+ YYYY(年份)
string startPrefix = MesePartenza.PadLeft(2, '0') + AnnoP.ToString();
string endPrefix = MeseFinale.PadLeft(2, '0') + AnnoF.ToString();

// 参数化SQL语句,OleDb参数按顺序匹配
OleDbCommand cmd = new OleDbCommand("DELETE FROM cartellini WHERE LEFT(id_car, 6) BETWEEN ? AND ?", connect);
cmd.Parameters.AddWithValue("@start", startPrefix);
cmd.Parameters.AddWithValue("@end", endPrefix);

// 执行删除,返回受影响行数可用于验证删除结果
int deletedRows = cmd.ExecuteNonQuery();

数据库界面示意图

额外注意事项

  • 如果要做单前缀模糊匹配,需要用LIKE运算符搭配通配符,例如匹配所有2023年1月的记录语法为WHERE id_car LIKE '012023*',不要将通配符和BETWEEN混用。
  • 可以通过deletedRows的值确认实际删除的行数,方便后续排查问题。

内容的提问来源于stack exchange,提问作者Mrpit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:15:02