SqlDataReader 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供從 SQL Server 資料庫中讀取順向資料流資料列的方式。 此類別無法獲得繼承。
public ref class SqlDataReader : System::Data::Common::DbDataReader, IDisposable, 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, 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 IDbColumnSchemaGenerator
interface IDisposable
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 IDisposable
Public NotInheritable Class SqlDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
- 繼承
- 繼承
- 繼承
- 實作
範例
下列範例會建立 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 概觀 \(部分機器翻譯\)