您的位置:首页 > 其它

ADO.NET的ExecuteReader()方法(标准)

2017-08-09 08:47 113 查看
ExecuteReader() 方法

    解释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处于连接状态。

练习:

从SQL Server数据表Student中读取所有记录打印到屏幕:

 

1 class Program
2     {
3         static void Main(string[] args)
4         {
5             string constr = @"server=.\SQLEXPRESS;database=MyDataBase;uid=sa;pwd=sa";
6             //string constr = @"server=.\SQLEXPRESS;database=MyDataBase;Integrated Security=True";
7
8
9
10             using (SqlConnection sqlconn = new SqlConnection(constr))
11             {
12                 string cmdstr = @"select * from Student";
13                 using (SqlCommand cmd = new SqlCommand(cmdstr, sqlconn))
14                 {
15                     if (sqlconn.State == ConnectionState.Closed)
16                     {
17                         sqlconn.Open();
18                     }
19                     SqlDataReader reader= cmd.ExecuteReader();
20
21                     if (reader.HasRows)//HasRows判断reader中是否有数据
22                     {
23                         while(reader.Read())  //Read()方法读取下一条记录,如果没有下一条,返回false,则表示读取完成
24                         {
25                             int id = reader.GetInt32(0);
26                             string name = reader.GetString(1);
27                            string  gender = reader.GetBoolean(3) == true ? "男" : "女"; //运用了三元表达式
28                             int age = reader.GetInt32(2);
29
30                             Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n",id,name,gender,age);
31                         }
32
33                         Console.ReadKey();
34                     }
35
36                 }
37
38             }
39         }
40     }


1                    //reader的第二种输出(遍历)方式,使用索引,效率会稍微低点,因为通过索引得到的为对象(object)
2                         //while (reader.Read())
3                         //{
4
5                         //    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader[0], reader[1], reader[2], reader[3]);
6                         //}
7                         //第三种,也是索引 ,方括号内指定数据库中的列名
8                         //while (reader.Read())
9                         //{
10
11                         //    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader["sId"], reader["sAge"], reader["sName"], ((bool)reader["sGender"] == true ? "男" : "女"));
12                         //}


 

 //第二种输出方式,使用索引,效率会稍微低点,因为通过索引得到的为对象(object)

                        //while (reader.Read())  

                        //{

                           

                        //    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader[0], reader[1], reader[2], reader[3]);

                        //}

                        //第三种,也是索引 ,方括号内指定数据库中的列名

                        //while (reader.Read())

                        //{

                        //    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\r\n", reader["sId"], reader["sAge"], reader["sName"], ((bool)reader["sGender"] == true ? "男" : "女"));

                        //}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: