ADO.Net SqlDataReader类

ADO.Net SqlDataReader类

ADO.Net的SqlDataReader类用于从SQL Server数据库读取数据。它从SQL Server数据库读取仅向前行的数据流中的数据。它是封闭的类,所以不能被继承。它继承了DbDataReader类并实现了IDisposable接口。

SqlDataReader的签名

public class SqlDataReader : System.Data.Common.DbDataReader, IDisposable

SqlDataReader类的属性

编号 属性 描述
1 Connection 它用于获取与SqlDataReader关联的SqlConnection
2 Depth 它被用来获取一个表示当前行的嵌套深度的值。
3 FieldCount 它用于获取当前行中的列数。
4 HasRows 它用于获取一个值,该值指示SqlDataReader是否包含一行或多行。
5 IsClosed 它用于检索布尔值,该值指示指定的SqlDataReader实例是否已关闭。
6 Item[String] 它用于以给定列名称的原始格式获取指定列的值。
7 Item[Int32] 它用于以给定列序号的原始格式获取指定列的值。
8 RecordsAffected 它用于通过执行Transact-SQL语句来获取更改,插入或删除的行数。
9 VisibleFieldCount 它用于获取SqlDataReader中未隐藏的字段数。

SqlDataReader类的属性

编号 属性 描述
1 Close() 它用于关闭SqlDataReader对象。
2 GetBoolean(Int32) 它用于以布尔值的形式获取指定列的值。
3 GetByte(Int32) 它用于获取指定列的值作为一个字节。
4 GetChar(Int32) 它用于获取指定列的值作为单个字符。
5 GetDateTime(Int32) 它用于获取指定列的值作为DateTime对象。
6 GetDecimal(Int32) 它用于获取指定列的值作为Decimal对象。
7 GetDouble(Int32) 它用于获取指定列的值作为双精度浮点数。
8 GetFloat(Int32) 它用于获取指定列的值作为单精度浮点数。
9 GetName(Int32) 它用于获取指定列的名称。
10 GetSchemaTable() 它用于获取描述SqlDataReader的列元数据的DataTable对象。
11 GetValue(Int32) 它用于以本机格式获取指定列的值。
12 GetValues(Object[]) 它用于使用当前行的列值填充对象数组。
13 NextResult() 当读取SQL语句的结果时,它用来获得下一个结果。
14 Read() 它用于从SQL Server数据库中读取记录。

要创建一个SqlDataReader实例,则必须调用SqlCommand对象的ExecuteReader方法。

示例

在下面的程序中,使用SqlDataReader从SQL Server获取数据。创建一个C#控制台应用项目:AdoNetSqlDataReader,如下所示 -

C#代码实现如下 -

using System;
using System.Data.SqlClient;

namespace AdoNetSqlDataReader
{
    class Program
    {
        static void Main(string[] args)
        {
            new Program().GetData();
        }
        public void GetData()
        {
            SqlConnection con = null;
            try
            {
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");
                // writing sql query  
                SqlCommand cm = new SqlCommand("select * from student_info", con);
                // Opening Connection  
                con.Open();
                Console.WriteLine("当前 student_info 表中存有以下学生信息:" );
                // Executing the SQL query  
                SqlDataReader sdr = cm.ExecuteReader();
                while (sdr.Read())
                {
                    Console.WriteLine("学生编号:" + sdr["id"] +" 学生姓名:" + sdr["name"] + " " + sdr["email"]);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("OOPs, something went wrong." + e);
            }
            // Closing the connection  
            finally
            {
                con.Close();
            }
        }
    }
}

执行上面示例代码,得到以下结果 -