如标题
(在SqlDataReader.ExecuteReader()中如果有多个结果集,那么SqlDataReader.HasRows属性检测的是什么?)
SqlDataReader和SqlDataAdapter不一样。SqlDataReader是建立连接后一行一行的读取数据。SqlCommand.ExecuteReader()只是返回一个数据集和指向下一个数据集的指针(即SqlDataAdapter),然后通过SqlDataAdapter.NextResult返回下一个数据集。HasRows判断是否有行,即当前返回的数据集是否存在行。
理解qlDataReader和SqlDataAdapter的区别 应该就好懂了。
嘻嘻 我是这样认为的
你的结论是对的,即SqlDataReader.HasRows判断的是[当前结果集]是否包含一行或多行.
但是你得出这个结论的逻辑就不知道是不是对的了...
SqlDataReader.ExecuteReader()是获取的数据集,数据集中有多少条数据HasRows就是多少
所有数据集的行数
还可能有多个结果集? 给sqlcommand绑定的sql语句或者存储过程能得到多个结果集?表示没看明白
正常都是一个结果集(多行) 然后read读出来,这里很灵活其实,一般都这么写:
List<Users> list = new List<Users>(); SqlConnection connection = new SqlConnection(conn); string sql = "select * from Users"; SqlCommand cmd = new SqlCommand(sql, connection); connection.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) //一列一列读 读完返回false { Users user = new Users(); user.ID = Convert.ToInt32(reader["ID"]); user.Name = reader["Name"].ToString(); user.PassWord = reader["Password"].ToString(); user.Description = reader["Description"].ToString(); list.Add(user); } reader.Close(); //关闭SqlDataReader对象 connection.Close(); //关闭数据库连接对象 this.dataGridView1.DataSource = list;
虽然你很热情,但是答非所问,并且你的回答是错的!
当多个结果集的时候可以调用NextResult
reader.NextResult());
SqlDataReader.HasRows属性检测的是第一个结果集