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

调用Fill前未初始化SelectCommand属性(WinForm DataGridView问题)

解决DataGridView展示数据库数据时的SelectCommand未初始化错误

问题原因及修复方案

  • 检查传入的查询语句有效性
    调用ShowPatient方法时,若传入的query为空字符串或null,会导致SqlCommand的CommandText未被有效初始化,触发该错误。调用时必须传入合法的SELECT查询语句,示例:

    MyPatient patient = new MyPatient();
    DataSet ds = patient.ShowPatient("SELECT * FROM Patients");
    dataGridView1.DataSource = ds.Tables[0];
    
  • 优化SqlDataAdapter初始化逻辑
    可以直接通过SqlDataAdapter构造函数传入查询语句和连接对象,简化代码同时避免手动创建SqlCommand的疏漏:

    public DataSet ShowPatient(string query)
    {
        ConnectionString MyConnection = new ConnectionString();
        using(SqlConnection Con = MyConnection.GetCon())
        {
            SqlDataAdapter sda = new SqlDataAdapter(query, Con);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            return ds;
        }
    }
    
  • 添加参数校验拦截无效输入
    在ShowPatient方法开头增加对query的校验,提前抛出错误避免后续异常:

    public DataSet ShowPatient(string query)
    {
        if(string.IsNullOrWhiteSpace(query))
        {
            throw new ArgumentException("查询语句不能为空", nameof(query));
        }
        // 后续原有逻辑...
    }
    
  • 用using语句管理数据库资源
    原代码未正确释放连接资源,使用using语句可自动处理连接的打开与关闭,避免资源泄漏:

    public DataSet ShowPatient(string query)
    {
        ConnectionString MyConnection = new ConnectionString();
        DataSet ds = new DataSet();
        using(SqlConnection Con = MyConnection.GetCon())
        {
            SqlCommand cmd = new SqlCommand(query, Con);
            using(SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                sda.Fill(ds);
            }
        }
        return ds;
    }
    

额外注意事项

  • 确认ConnectionString类的GetCon()方法返回的SqlConnection对象配置正确,连接字符串包含有效的服务器地址、数据库名称、认证信息。
  • 先在数据库客户端(如SSMS)测试查询语句,排除SQL语法错误导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:45:57