SqlDataReader 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供從 SQL Server 資料庫中讀取順向資料流資料列的方式。 此類別無法獲得繼承。
public ref class SqlDataReader : System::Data::Common::DbDataReader, IDisposable
public ref class SqlDataReader sealed : MarshalByRefObject, IDisposable, System::Collections::IEnumerable, System::Data::IDataReader
public ref 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
public class SqlDataReader : System.Data.Common.DbDataReader, System.Data.Common.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
type SqlDataReader = class
inherit DbDataReader
interface IDataReader
interface IDataRecord
interface IDisposable
interface IDbColumnSchemaGenerator
Public Class SqlDataReader
Inherits DbDataReader
Implements IDisposable
Public NotInheritable Class SqlDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
Public Class SqlDataReader
Inherits DbDataReader
Implements IDbColumnSchemaGenerator
- 繼承
- 繼承
- 繼承
- 實作
範例
下列範例會建立 SqlConnection、、 SqlCommand和 SqlDataReader。 此範例會讀取數據,並將它寫出主控台視窗。 然後程式代碼會 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
使用者會看到另一個處理序或執行緒對結果集所進行的變更。 但精確的行為取決於時間點。
IsClosed 與 RecordsAffected 是在關閉 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 中沒有隱藏的欄位數。 |
方法
明確介面實作
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。 |
適用於
另請參閱
- DataAdapter 和 DataReader
- SQL Server and ADO.NET (SQL Server 和 ADO.NET)
- ADO.NET 概觀 \(部分機器翻譯\)