SqlDataReader 類別

定義

提供從 SQL Server 資料庫中讀取順向資料流資料列的方式。 此類別無法獲得繼承。

public ref class SqlDataReader : System::Data::Common::DbDataReader, IDisposable, System::Data::Common::IDbColumnSchemaGenerator
public ref class SqlDataReader : System::Data::Common::DbDataReader, System::Data::Common::IDbColumnSchemaGenerator
public ref class SqlDataReader : System::Data::Common::DbDataReader, IDisposable
public ref class SqlDataReader sealed : MarshalByRefObject, IDisposable, System::Collections::IEnumerable, System::Data::IDataReader
public class SqlDataReader : System.Data.Common.DbDataReader, IDisposable, System.Data.Common.IDbColumnSchemaGenerator
public class SqlDataReader : System.Data.Common.DbDataReader, System.Data.Common.IDbColumnSchemaGenerator
public class SqlDataReader : System.Data.Common.DbDataReader, IDisposable
public sealed class SqlDataReader : MarshalByRefObject, IDisposable, System.Collections.IEnumerable, System.Data.IDataReader
type SqlDataReader = class
    inherit DbDataReader
    interface IDisposable
    interface IDbColumnSchemaGenerator
type SqlDataReader = class
    inherit DbDataReader
    interface IDataReader
    interface IDataRecord
    interface IDisposable
    interface IDbColumnSchemaGenerator
type SqlDataReader = class
    inherit DbDataReader
    interface IDisposable
type SqlDataReader = class
    inherit MarshalByRefObject
    interface IEnumerable
    interface IDataReader
    interface IDisposable
    interface IDataRecord
type SqlDataReader = class
    inherit DbDataReader
    interface IDataReader
    interface IDisposable
    interface IDataRecord
Public Class SqlDataReader
Inherits DbDataReader
Implements IDbColumnSchemaGenerator, IDisposable
Public Class SqlDataReader
Inherits DbDataReader
Implements IDbColumnSchemaGenerator
Public Class SqlDataReader
Inherits DbDataReader
Implements IDisposable
Public NotInheritable Class SqlDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
繼承
SqlDataReader
繼承
繼承
SqlDataReader
實作

範例

下列範例會建立 SqlConnection、、 SqlCommandSqlDataReader。 此範例會讀取數據,並將它寫出主控台視窗。 然後程式代碼會 SqlDataReader關閉 。 會在 SqlConnection 程式代碼區塊結尾 using 自動關閉 。

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string str = "Data Source=(local);Initial Catalog=Northwind;"
            + "Integrated Security=SSPI";
        ReadOrderData(str);
    }

    private static void ReadOrderData(string connectionString)
    {
        string queryString =
            "SELECT OrderID, CustomerID FROM dbo.Orders;";

        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            SqlCommand command =
                new SqlCommand(queryString, connection);
            connection.Open();

            SqlDataReader reader = command.ExecuteReader();

            // Call Read before accessing data.
            while (reader.Read())
            {
                ReadSingleRow((IDataRecord)reader);
            }

            // Call Close when done reading.
            reader.Close();
        }
    }

    private static void ReadSingleRow(IDataRecord dataRecord)
    {
        Console.WriteLine(String.Format("{0}, {1}", dataRecord[0], dataRecord[1]));
    }
}
Option Explicit On
Option Strict On

Imports System.Data
Imports System.Data.SqlClient

Module Module1

    Sub Main()
        Dim str As String = "Data Source=(local);Initial Catalog=Northwind;" _
       & "Integrated Security=SSPI;"
        ReadOrderData(str)
    End Sub

    Private Sub ReadOrderData(ByVal connectionString As String)
        Dim queryString As String = _
            "SELECT OrderID, CustomerID FROM dbo.Orders;"

        Using connection As New SqlConnection(connectionString)
            Dim command As New SqlCommand(queryString, connection)
            connection.Open()

            Dim reader As SqlDataReader = command.ExecuteReader()

            ' Call Read before accessing data.
            While reader.Read()
                ReadSingleRow(CType(reader, IDataRecord))
            End While

            ' Call Close when done reading.
            reader.Close()
        End Using
    End Sub

    Private Sub ReadSingleRow(ByVal record As IDataRecord)
       Console.WriteLine(String.Format("{0}, {1}", record(0), record(1)))

    End Sub

End Module

備註

若要建立 SqlDataReader,您必須呼叫 ExecuteReader 物件的 方法 SqlCommand ,而不是直接使用建構函式。

SqlDataReader使用 時,相關聯的 SqlConnection 會忙於提供 SqlDataReader,而且除了關閉作業之外,也無法對SqlConnection其他作業執行。 這是在呼叫的 SqlDataReader 方法之前Close的情況。 例如,在呼叫 Close之後,您才能擷取輸出參數。

正在讀取資料時,SqlDataReader 使用者會看到另一個處理序或執行緒對結果集所進行的變更。 但精確的行為取決於時間點。

IsClosedRecordsAffected 是在關閉 SqlDataReader 後唯一可呼叫的屬性。 RecordsAffected雖然 可以在 存在時SqlDataReader存取 屬性,但一律先呼叫 ,再傳Close回的值RecordsAffected,以確保正確的傳回值。

使用循序存取 () CommandBehavior.SequentialAccess 時, InvalidOperationException 如果 SqlDataReader 位置是進階的,而且在上一個數據行上嘗試另一個讀取作業,則會引發 。

注意

為了獲得最佳效能, SqlDataReader 請避免建立不必要的物件或建立不必要的數據複本。 因此,對方法的多個呼叫,例如 GetValue 傳回相同對象的參考。 如果您要修改方法所傳回之物件的基礎值,請小心,例如 GetValue

屬性

Connection

取得與 SqlConnection 相關聯的 SqlDataReader

Depth

取得值,表示目前資料列的巢狀深度。

FieldCount

取得目前資料列中的資料行數目。

HasRows

取得值,指出 SqlDataReader 是否包含一個或多個資料列。

IsClosed

擷取布林值,指出指定的 SqlDataReader 執行個體是否已關閉。

Item[Int32]

提供資料行序數,取得使用原生格式的指定資料行值。

Item[String]

提供資料行名稱,取得使用原生格式的指定資料行值。

RecordsAffected

取得 Transact-SQL 陳述式的執行所變更、插入或刪除的資料列數目。

VisibleFieldCount

取得 SqlDataReader 中沒有隱藏的欄位數。

方法

Close()

關閉 SqlDataReader 物件。

Close()

關閉 DbDataReader 物件。

(繼承來源 DbDataReader)
CloseAsync()

非同步關閉 DbDataReader 物件。

(繼承來源 DbDataReader)
CreateObjRef(Type)

建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。

(繼承來源 MarshalByRefObject)
Dispose()

釋放 DbDataReader 類別目前的執行個體所使用的全部資源。

(繼承來源 DbDataReader)
Dispose(Boolean)

提供從 SQL Server 資料庫中讀取順向資料流資料列的方式。 此類別無法獲得繼承。

Dispose(Boolean)

釋放 DbDataReader 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

(繼承來源 DbDataReader)
DisposeAsync()

以非同步方式將 DbDataReader 類別的目前執行個體所使用所有資源釋出。

(繼承來源 DbDataReader)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetBoolean(Int32)

取得指定之資料行的值做為布林值 (Boolean)。

GetByte(Int32)

取得指定資料行的值做為位元組。

GetBytes(Int32, Int64, Byte[], Int32, Int32)

從指定資料行位移將位元組資料流讀取到緩衝區中,作為以指定的緩衝區位移開頭的陣列。

GetChar(Int32)

從指定的資料行取得單一字元形式的值。

GetChars(Int32, Int64, Char[], Int32, Int32)

從指定的資料行位移將字元資料流讀取到緩衝區中,作為以指定緩衝區位移開頭的陣列。

GetColumnSchema()

取得唯讀資料行結構描述集合。

GetColumnSchemaAsync(CancellationToken)

這是 GetColumnSchema(DbDataReader) 的非同步版本。 提供者應該覆寫為適當的實作。 您可以選擇性地接受 cancellationToken。 預設實作會叫用同步GetColumnSchema(DbDataReader)呼叫並傳回完成的工作。 如果傳遞一個已經被取消的 cancellationToken,預設實作會傳回已取消的工作。 GetColumnSchema(DbDataReader) 擲回的例外狀況會透過傳回的工作例外狀況屬性來傳送。

(繼承來源 DbDataReader)
GetData(Int32)

傳回指定之資料行序數的 IDataReader

GetData(Int32)

傳回所要求資料行的巢狀資料讀取器。

(繼承來源 DbDataReader)
GetDataTypeName(Int32)

取得字串,表示指定之資料行的資料型別。

GetDateTime(Int32)

取得指定之資料行的值做為 DateTime 物件。

GetDateTimeOffset(Int32)

擷取指定資料行的值做為 DateTimeOffset 物件。

GetDbDataReader(Int32)

傳回所要求資料行序數的 DbDataReader 物件,可使用提供者特定的實作 (Implementation) 覆寫。

(繼承來源 DbDataReader)
GetDecimal(Int32)

取得指定之資料行的值做為 Decimal 物件。

GetDouble(Int32)

從指定的資料行取得雙精確度浮點數形式的值。

GetEnumerator()

傳回透過 IEnumerator 重複的 SqlDataReader

GetFieldType(Int32)

取得 Type,即是物件的資料型別。

GetFieldValue<T>(Int32)

同步取得指定之資料行的值做為型別。 GetFieldValueAsync<T>(Int32, CancellationToken) 是這個方法的非同步版本。

GetFieldValue<T>(Int32)

取得所指定資料行值作為要求類型。

(繼承來源 DbDataReader)
GetFieldValueAsync<T>(Int32)

以非同步方式取得所指定資料行的值作為要求類型。

(繼承來源 DbDataReader)
GetFieldValueAsync<T>(Int32, CancellationToken)

非同步取得指定之資料行的值做為型別。 GetFieldValue<T>(Int32) 是這個方法的同步版本。

GetFieldValueAsync<T>(Int32, CancellationToken)

以非同步方式取得所指定資料行的值作為要求類型。

(繼承來源 DbDataReader)
GetFloat(Int32)

取得指定資料行的值做為單精確度浮點數。

GetGuid(Int32)

從指定的資料行取得通用唯一識別碼 (GUID) 形式的值。

GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetInt16(Int32)

取得指定資料行的值做為 16 位元帶正負號的整數。

GetInt32(Int32)

取得指定資料行的值作為 32 位元帶正負號的整數。

GetInt64(Int32)

取得指定資料行的值做為 64 位元帶正負號的整數 (Signed Integer)。

GetLifetimeService()
已淘汰.

擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。

(繼承來源 MarshalByRefObject)
GetName(Int32)

取得指定資料行的名稱。

GetOrdinal(String)

提供資料行的名稱,取得資料行序數。

GetProviderSpecificFieldType(Int32)

取得 Object,其為基礎提供者特定欄位型別的表示。

GetProviderSpecificValue(Int32)

取得 Object,其為基礎提供者特定值的表示。

GetProviderSpecificValues(Object[])

取得物件的陣列,這些物件是基礎提供者特定值的表示。

GetSchemaTable()

傳回 DataTable,以描述 SqlDataReader 的資料行中繼資料。

GetSchemaTable()

傳回 DataTable,以描述 DbDataReader 的資料行中繼資料。 null如果已執行的指令未傳回任何結果集,或傳回 之後NextResult(),則傳回 false

(繼承來源 DbDataReader)
GetSchemaTableAsync(CancellationToken)

這是 GetSchemaTable() 的非同步版本。 提供者應該覆寫為適當的實作。 您可以選擇性地接受 cancellationToken。 預設實作會叫用同步GetSchemaTable()呼叫並傳回完成的工作。 如果傳遞一個已經被取消的 cancellationToken,預設實作會傳回已取消的工作。 GetSchemaTable() 擲回的例外狀況會透過傳回的工作例外狀況屬性來傳送。

(繼承來源 DbDataReader)
GetSqlBinary(Int32)

取得指定的資料行值做為 SqlBinary

GetSqlBoolean(Int32)

取得指定的資料行值做為 SqlBoolean

GetSqlByte(Int32)

取得指定的資料行值做為 SqlByte

GetSqlBytes(Int32)

取得指定資料行的值做為 SqlBytes

GetSqlChars(Int32)

取得指定資料行的值做為 SqlChars

GetSqlDateTime(Int32)

取得指定的資料行值做為 SqlDateTime

GetSqlDecimal(Int32)

取得指定的資料行值做為 SqlDecimal

GetSqlDouble(Int32)

取得指定的資料行值做為 SqlDouble

GetSqlGuid(Int32)

取得指定的資料行值做為 SqlGuid

GetSqlInt16(Int32)

取得指定的資料行值做為 SqlInt16

GetSqlInt32(Int32)

取得指定的資料行值做為 SqlInt32

GetSqlInt64(Int32)

取得指定的資料行值做為 SqlInt64

GetSqlMoney(Int32)

取得指定的資料行值做為 SqlMoney

GetSqlSingle(Int32)

取得指定的資料行值做為 SqlSingle

GetSqlString(Int32)

取得指定的資料行值做為 SqlString

GetSqlValue(Int32)

將指定之資料行內的資料值當做 SQL Server 型別傳回。

GetSqlValues(Object[])

填滿 Object 陣列,其中包含記錄內所有資料行 (表示為 SQL Server 型別) 的值。

GetSqlXml(Int32)

取得指定資料行的值做為 XML 值。

GetStream(Int32)

擷取二進位、影像、varbinary、UDT 和 variant 資料型別做為Stream

GetStream(Int32)

取得資料流以從指定的資料行擷取資料。

(繼承來源 DbDataReader)
GetString(Int32)

取得指定的資料行值做為字串。

GetTextReader(Int32)

擷取 Char、NChar、 NText、 NVarChar、 文字、 varChar 及 Variant 資料型別做為TextReader

GetTextReader(Int32)

取得文字讀取器以從資料行擷取資料。

(繼承來源 DbDataReader)
GetTimeSpan(Int32)

擷取指定資料行的值做為 TimeSpan 物件。

GetType()

取得目前執行個體的 Type

(繼承來源 Object)
GetValue(Int32)

取得使用原生格式的指定資料行值。

GetValues(Object[])

使用目前資料列的資料行值填入物件陣列。

GetXmlReader(Int32)

擷取 XML 型別的資料做為XmlReader

InitializeLifetimeService()
已淘汰.

取得存留期服務物件,以控制這個執行個體的存留期原則。

(繼承來源 MarshalByRefObject)
IsCommandBehavior(CommandBehavior)

判斷指定的 CommandBehavior 是否與 SqlDataReader 的行為相符。

IsDBNull(Int32)

取得值,指出資料行是否含有不存在或遺漏的值。

IsDBNullAsync(Int32)

以非同步方式取得值,指出資料行是否包含不存在或遺漏的值。

(繼承來源 DbDataReader)
IsDBNullAsync(Int32, CancellationToken)

IsDBNull(Int32) 的非同步版本,該版本會取得值,表示資料行是否包含不存在或遺漏的值。

取消語彙基元可用於要求在命令逾時之前捨棄作業。 例外狀況將經由傳回的 Task 物件回報。

IsDBNullAsync(Int32, CancellationToken)

以非同步方式取得值,指出資料行是否包含不存在或遺漏的值。

(繼承來源 DbDataReader)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
MemberwiseClone(Boolean)

建立目前 MarshalByRefObject 物件的淺層複本。

(繼承來源 MarshalByRefObject)
NextResult()

當讀取批次 Transact-SQL 陳述式的結果時,將資料讀取器前移到下一個結果。

NextResultAsync()

在讀取陳述式批次的結果時,以非同步方式將讀取器向前移到下一個結果。

(繼承來源 DbDataReader)
NextResultAsync(CancellationToken)

異步版本的 NextResult(),會在讀取批次 Transact-SQL 語句的結果時,將數據讀取器前進到下一個結果。

取消語彙基元可用於要求在命令逾時之前捨棄作業。 例外狀況將經由傳回的 Task 物件回報。

NextResultAsync(CancellationToken)

在讀取陳述式批次的結果時,以非同步方式將讀取器向前移到下一個結果。

(繼承來源 DbDataReader)
Read()

SqlDataReader 推進到下一筆記錄。

ReadAsync()

以非同步方式將讀取器向前移到結果集中的下一筆記錄。

(繼承來源 DbDataReader)
ReadAsync(CancellationToken)

非同步版本的 Read(),這個版本會將 SqlDataReader 前移至下一筆記錄。

取消語彙基元可用於要求在命令逾時之前捨棄作業。 例外狀況將經由傳回的 Task 物件回報。

ReadAsync(CancellationToken)

以非同步方式將讀取器向前移到結果集中的下一筆記錄。

(繼承來源 DbDataReader)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

明確介面實作

IDataReader.Close()

如需這個成員的說明,請參閱 Close()

(繼承來源 DbDataReader)
IDataReader.GetSchemaTable()

如需這個成員的說明,請參閱 GetSchemaTable()

(繼承來源 DbDataReader)
IDataRecord.GetData(Int32)

傳回指定之資料行序數的 IDataReader

IDataRecord.GetData(Int32)

如需這個成員的說明,請參閱 GetData(Int32)

(繼承來源 DbDataReader)
IDisposable.Dispose()

釋放資料讀取器使用的所有資源。

IEnumerable.GetEnumerator()

傳回可用來逐一查看項目集合的列舉值。

擴充方法

CanGetColumnSchema(DbDataReader)

取得值,指出 DbDataReader 是否可取得資料行結構描述。

GetColumnSchema(DbDataReader)

取得 DbDataReader 的資料行結構描述 (DbColumn 集合)。

Cast<TResult>(IEnumerable)

IEnumerable 的項目轉換成指定的型別。

OfType<TResult>(IEnumerable)

根據指定的型別來篩選 IEnumerable 的項目。

AsParallel(IEnumerable)

啟用查詢的平行化作業。

AsQueryable(IEnumerable)

IEnumerable 轉換成 IQueryable

適用於

另請參閱