数据读取器概述
数据读取器是实现了System.Data.IDataReader接口的对象,它是快速的、未缓存的、仅向前的、只读的、已连接数据源的、逐行检索数据的数据流。它在遍历结果集时,一次只能读取一行。
数据读取器不能直接实例化,而要通过执行命令对象的ExecuteReader方法创建它的实例。如下创建SqlClient数据读取器:
SqlDataReader rdr=cmd.ExecuteReader();
该数据读取器可用来访问查询的结果集。
实例:遍历结果集
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace DataLooper { class Program { static void Main(string[] args) { SqlConnection conn = new SqlConnection(@" server = .; integrated security =true; database =northwind" ); string sql = @"select contactname from customers"; try { conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { Console.WriteLine("{0}", rdr[0]); } rdr.Close(); } catch (Exception e) { Console.WriteLine("Error Occurred: " + e); } finally { conn.Close(); } Console.ReadKey(); } } }
SqlDataReader类是抽象类,不能显式实例化。因此,必须执行SqlCommand的ExecuteReader()方法,来获取SqlDataReader的实例:
SqlDataReader rdr =cmd.ExecuteReader();
遍历结果集的每一行,需要调用SqlDataReader的Read方法,如果存在下一行,该方法就返回true,并向前移动游标,如果没有,返回false.所以可以用while循环来完成遍历操作:
while (rdr.Read())
{
Console.WriteLine("{0}", rdr[0]);
}