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

C#中MySqlDataReader.Read()循环无法执行问题求助

问题诊断与解决方案

你碰到的问题根源很明确:SQL查询里的变量没有正确传递给数据库,导致查询返回空结果,所以while (rdr.Read())循环根本不会执行。

具体错误点

看你的查询语句:

string query = "SELECT * FROM debtors WHERE NIC = 'id'";

这里的'id'是一个固定的字符串字面量,数据库会去查找NIC字段等于字符串"id"的记录,而不是你通过构造函数传入的id变量值!这就是为什么你确认变量无误,但还是查不到数据。

修复方案(推荐参数化查询)

解决这个问题最安全、规范的方式是使用参数化查询,它不仅能正确传递变量,还能避免SQL注入攻击:

namespace LoanApp { 
    public partial class TablePopUp : Form { 
        string id; 
        public TablePopUp(string var) { 
            id = var; 
            InitializeComponent(); 
            try { 
                ConnectDB connection = new ConnectDB(); 
                MySqlConnection con = connection.setUpConnection(); 
                con.Open(); 
                // 用参数占位符替代硬编码的字符串
                string query = "SELECT * FROM debtors WHERE NIC = @NIC"; 
                MySqlCommand cmd3 = new MySqlCommand(query, con); 
                // 将变量绑定到参数
                cmd3.Parameters.AddWithValue("@NIC", id); 
                MySqlDataReader rdr = cmd3.ExecuteReader(); 
                textBox1.Text = var.ToString(); 
                while (rdr.Read()) { 
                    txtBoxSearch.Text = rdr.GetValue(1).ToString(); 
                    textBox2.Text = rdr.GetValue(5).ToString(); 
                    textBox3.Text = rdr.GetValue(4).ToString(); 
                } 
                rdr.Close(); 
                con.Close(); 
            } catch (Exception ex) { 
                MessageBox.Show(ex.ToString()); 
            } 
        } 
    } 
}

额外注意事项

  • 列索引检查:rdr.GetValue(1)、rdr.GetValue(4)这些索引是从0开始的,要确认它们对应的数据表列确实是你需要的字段,如果列顺序有变化,建议改用列名读取(比如rdr["ColumnName"].ToString()),更健壮。
  • 数据存在性验证:可以在执行查询后先判断rdr.HasRows,如果为false可以提示用户"未找到匹配记录",提升用户体验。

不推荐的字符串拼接方式

虽然也可以用字符串插值拼接查询语句,但这种方式存在SQL注入风险,而且如果id包含单引号会直接报错,所以不建议使用:

// 不推荐,仅作示例
string query = $"SELECT * FROM debtors WHERE NIC = '{id}'";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:48:12