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();
            }
        }
    }
}

執行上面範例程式碼,得到以下結果 -