SqlDataReader类实现只向前、只读的游标样式模型,读取并遍历SQL Server返回的结果集。创建 SqlDataReader对象必须用 SqlCommand 对象的 ExecuteReader 方法来实例化SqlDataReader。
如: SqlDataReader rdr = cmd.ExecuteReader();//来实例化SqlDataReader。
(1)SqlDataReader对象只能向前读取数据。也就是只能往下读知道读完,而不能回头读取先前的记录。
(2)SqlDataReader对象是只读的,不能对其中的结果集进行修改或删除。
(3)SqlDataReader对象只能直接将结果集传递给显示对象,而不能在IIS的内容中保持数据。
(4)SqlDataReader通过Boolean方法Read逐条访问记录,Read返回false则不再有数据读取。
(1)当使用完SqlDataReader对象时应立即调用close()方法将其关闭。(因为在未关闭之前,与SqlDataReader对象关联的 SqlConnection 一直为其服务,对 SqlConnection 无法执行任何其他操作)。
(2)当创建多个SqlDataReader对象时必须每个对象创建一个SqlConnection 连接对象。(因为一个SqlConnection 连接对象只能被一个SqlDataReader对象使用)。
(3)如果实例化SqlDataReader对象的是存储过程的返回值或输出参数时,须调用SqlDataReader的Close()方法后才能准确的获得存储过程的返回值或者输出参数。
(4)如果要在SqlDataReader对象中的数据未读取完之前关闭SqlDataReader对象,则应Command对象的Cancel()方法,然后再关闭SqlDataReader对象。
(5)读取SqlDataReader对象时尽量使用和数据库字段类型匹配的方法,以减少类型转换。
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
namespace sqlconnection1
{
class Program
{
private void SQLConnectionF(string source, string select)
{
SqlConnection con = new SqlConnection(source);
try
{
con.Open();
Console.WriteLine("connection is successful!");
}
catch (Exception e)
{
Console.WriteLine("connection error is :{0}", e.ToString());
}
SqlCommand sqlcmd = new SqlCommand(select, con);
SqlDataReader reader = sqlcmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("name:{0,-20} number{1,-10} low:{2,-10} high:{3}", reader[0], reader[1],reader[2],reader[3]);
}
Console.ReadLine();
con.Close();
}
static void Main(string[] args)
{
string sou = "server=duanyf//SQLEXPRESS;" + "Initial Catalog=master;" + "UID = sa;"+"Password = dyf123";
string sel = "SELECT name,number,low,high From dbo.spt_values";
Program sqlcon = new Program();
sqlcon.SQLConnectionF( sou,sel);
}
}
}