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

C#技术问询:如何检查Access数据库中指定值是否存在并处理异常

问题分析与修正代码

你的代码存在几个关键问题导致逻辑失效:

  1. 重复调用Fill方法:oda.Fill(dt)会执行查询并返回受影响的行数(整数类型),不可能等于null,而且多次调用会重复填充数据,导致判断逻辑完全错误。
  2. 错误的存在性判断逻辑:应该通过DataTable.Rows.Count判断是否查询到数据,而不是比较Fill的返回值。
  3. SQL注入风险:直接拼接用户输入到SQL语句中,存在安全隐患,必须使用参数化查询。
  4. 未正确释放数据库资源:数据库连接和适配器未用using语句包裹,可能导致资源泄漏。
  5. 硬编码列索引:直接用dt.Rows[0][1]这种索引访问,可读性差且容易因表结构变化出错,建议改用列名。

修正后的代码:

// 使用using自动释放连接资源
using (OleDbConnection olcn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\TestUser\Documents\testlist.mdb"))
{
    // 参数化查询避免SQL注入
    string sql = "select * from testlist where num = @Num";
    OleDbDataAdapter oda = new OleDbDataAdapter(sql, olcn);
    oda.SelectCommand.Parameters.AddWithValue("@Num", textBox11.Text);
    
    DataTable dt = new DataTable();
    oda.Fill(dt);

    // 判断是否查询到数据
    if (dt.Rows.Count == 0)
    {
        label12.Show();
    }
    else
    {
        DataRow row = dt.Rows[0];
        // 建议用列名代替索引,比如row["列名"].ToString()
        textBox1.Text = row[1].ToString();
        textBox2.Text = row[2].ToString();
        textBox3.Text = row[3].ToString();
        textBox4.Text = row[4].ToString();
        textBox5.Text = row[5].ToString();
        textBox6.Text = row[6].ToString();
        textBox7.Text = row[7].ToString();
        textBox8.Text = row[8].ToString();
        textBox9.Text = row[9].ToString();
        textBox10.Text = row[10].ToString();

        string imgPath1 = row[11].ToString();
        if (!string.IsNullOrEmpty(imgPath1))
        {
            pictureBox1.Load(imgPath1);
        }
        else
        {
            pictureBox1.Load(row[12].ToString());
        }
    }
}

关键修正点说明:

  • 用using包裹OleDbConnection,确保连接自动关闭释放。
  • 改用参数化查询,将用户输入作为参数传入,避免SQL注入同时避免字符串拼接的格式问题(比如num是数字类型时不需要加引号)。
  • 通过dt.Rows.Count == 0判断是否没有匹配数据,此时显示label12。
  • 查询到数据时直接取第一行数据赋值,避免重复调用Fill。
  • 提取DataRow变量简化代码,同时建议替换硬编码索引为实际列名,提升代码可维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:00:43