如何判断SqlDataAdapter查询是否包含数据?C# ADO新手求助
问题分析与修复
你的代码逻辑错误在于判断的对象不对:你通过new SqlDataAdapter(...)实例化的对象永远不会是null,所以不管SQL查询有没有返回记录,都会执行MessageBox.Show("Records have been read"),else分支永远不会触发。
正确的做法是:先让SqlDataAdapter填充DataTable,再通过DataTable的Rows.Count属性判断是否有查询结果。
修正后的代码
public static void readSqlData(String sSource) { string strSelection = "SELECT * FROM " + sSource; dt = new DataTable(); using (SqlDataAdapter da = new SqlDataAdapter(strSelection, cnn)) { da.Fill(dt); } if (dt.Rows.Count > 0) { MessageBox.Show("Records have been read"); } else { MessageBox.Show("No records \n" + strSelection); } }
额外提示
- 我添加了
using语句来自动释放SqlDataAdapter的资源,这是.NET中处理资源的最佳实践。 - 注意:直接用字符串拼接表名存在SQL注入风险,如果
sSource来自用户输入,一定要先验证表名的合法性(比如检查是否在允许的表名列表中),避免安全问题。
内容的提问来源于stack exchange,提问作者eric.j.march
相关产品推荐
相关产品推荐

