调用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
相关产品推荐
相关产品推荐

