SqlCommand的ExecuteReader方法
用于执行查询语句,并返回一个DataReader类型的行集合。
解释1:将SQL语句发送到指定连接 生成一个SqlDataReader对象
解释2:当ExecuteReader()执行后返回一个SqlDataReader对象
两种解释实际上都在说明些方法就是给SqlDataReader对象一个可以访问查询到的结果的渠道。
程序执行分析
1、首先需要new一个SqlDataReader对象。接收ExecuteReader()执行后返回的SqlDataReader对象。
2、SqlDataReader的HasRows属性可以判断SqlDataReader中是否有(一行或多行)数据,返回bool值,有数据时为true,程序向下执行,开始进入读取数据环节。
3、SqlDataReader的Read方法可以使SqlDataReader前进到下一条记录,同样返回bool值,当下一条无记录返回false,则表示记录读取完毕;当下一条有数据时为true,将读取到的数据(当前的一条记录)暂存在SqlDataReader中。
4、SqlDataReader的一系列get方法可以获取SqlDataReader中不同类型的值,保存到指定的变量中。
注:get方法参数为列数,即第几列。
还有一点很重要,DataReader必须保证SqlConnection处于连接状态。
输出 用户 表中的所以信息:
using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\Database1.mdf;integrated Security=True;User Instance=false")) { conn.Open();//打开数据库 using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from 用户";//搜索用户表 using (SqlDataReader reader = cmd.ExecuteReader())//提供一种从 SQL Server 数据库读取行的只进流的方式。此类不能被继承。 { while (reader.Read())//读取获取结果集里面所有行信息(Read: 如果存在多个行,则为 true;否则为 false。) { Console.WriteLine("用户表中的ID:{0},帐号:{1},密码{2}.",reader.GetInt32(0), reader.GetString(1), reader.GetString(2));//输出Get...是输出 括号里面是要输出的列,从0开始。 //Console.WriteLine("用户表中的ID:{0},帐号:{1},密码{2}.", reader.GetInt32(reader.GetOrdinal("id")), reader.GetString(reader.GetOrdinal("帐号")), reader.GetString(reader.GetOrdinal("密码"))); //另一种方法,可以使用 reader.GetOrdinal("id") 获取该列的 序号值。 } } } }
输出结果: