OracleDataReader 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供自資料來源讀取順向資料流的資料列的方法。 此類別無法獲得繼承。
public ref class OracleDataReader sealed : MarshalByRefObject, IDisposable, System::Collections::IEnumerable, System::Data::IDataReader
public ref class OracleDataReader sealed : System::Data::Common::DbDataReader
public sealed class OracleDataReader : MarshalByRefObject, IDisposable, System.Collections.IEnumerable, System.Data.IDataReader
public sealed class OracleDataReader : System.Data.Common.DbDataReader
type OracleDataReader = class
inherit MarshalByRefObject
interface IDataReader
interface IDisposable
interface IDataRecord
interface IEnumerable
type OracleDataReader = class
inherit DbDataReader
Public NotInheritable Class OracleDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
Public NotInheritable Class OracleDataReader
Inherits DbDataReader
- 繼承
- 繼承
- 實作
範例
下列範例會 OracleConnection 建立 、、 OracleCommand 和 OracleDataReader 。 此範例會讀取資料,並將其寫出至主控台。 最後,此範例會 OracleDataReader 關閉 ,然後關閉 OracleConnection 。
public void ReadData(string connectionString)
{
string queryString = "SELECT EmpNo, EName FROM Emp";
using (OracleConnection connection = new OracleConnection(connectionString))
{
OracleCommand command = new OracleCommand(queryString, connection);
connection.Open();
using(OracleDataReader reader = command.ExecuteReader())
{
// Always call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
}
}
}
}
Public Sub ReadData(ByVal connectionString As String)
Dim queryString As String = "SELECT EmpNo, EName FROM Emp"
Using connection As New OracleConnection(connectionString)
Dim command As New OracleCommand(queryString, connection)
connection.Open()
Using reader As OracleDataReader = command.ExecuteReader()
' Always call Read before accessing data.
While reader.Read()
Console.WriteLine(reader.GetInt32(0).ToString() + ", " _
+ reader.GetString(1))
End While
End Using
End Using
End Sub
備註
若要建立 OracleDataReader ,您必須呼叫 ExecuteReader 物件的 方法 OracleCommand ,而不是直接使用建構函式。
當讀取資料時,對另一個進程或執行緒對結果集所做的變更,可能會對 的使用者 OracleDataReader 顯示。
IsClosed 與 RecordsAffected 是在關閉 OracleDataReader 後唯一可呼叫的屬性。 在某些情況下,您必須先呼叫 Close ,才能呼叫 RecordsAffected 。
任何指定時間都可以開啟一個 OracleDataReader 以上的 。
下列兩個 Visual Basic 範例示範如何使用 OracleDataReader 來擷取 Oracle REF CURSOR
。 這些範例會使用 Oracle Scott/Tiger 架構中定義的資料表,而且需要下列 PL/SQL 套件和套件主體。 您必須在伺服器上建立這些專案,才能使用範例。
在 Oracle 伺服器上建立下列 Oracle 封裝。
CREATE OR REPLACE PACKAGE CURSPKG AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
IO_CURSOR IN OUT T_CURSOR);
PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
DEPTCURSOR OUT T_CURSOR);
END CURSPKG;
/
在 Oracle 伺服器上建立下列 Oracle Package 內容。
CREATE OR REPLACE PACKAGE BODY CURSPKG AS
PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
IO_CURSOR OUT T_CURSOR)
IS
V_CURSOR T_CURSOR;
BEGIN
IF N_EMPNO <> 0 THEN
OPEN V_CURSOR FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.EMPNO = N_EMPNO;
ELSE
OPEN V_CURSOR FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
END IF;
IO_CURSOR := V_CURSOR;
END OPEN_ONE_CURSOR;
PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
DEPTCURSOR OUT T_CURSOR)
IS
V_CURSOR1 T_CURSOR;
V_CURSOR2 T_CURSOR;
BEGIN
OPEN V_CURSOR1 FOR SELECT * FROM EMP;
OPEN V_CURSOR2 FOR SELECT * FROM DEPT;
EMPCURSOR := V_CURSOR1;
DEPTCURSOR := V_CURSOR2;
END OPEN_TWO_CURSORS;
END CURSPKG;
/
這個 Visual Basic 範例會執行會傳回 REF CURSOR
參數的 PL/SQL 預存程式,並將值讀取為 OracleDataReader 。
Private Sub ReadOracleData(ByVal connectionString As String)
Dim connection As New OracleConnection(connectionString)
Dim command As New OracleCommand()
Dim reader As OracleDataReader
connection.Open()
command.Connection = connection
command.CommandText = "CURSPKG.OPEN_ONE_CURSOR"
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add(New OracleParameter("N_EMPNO", OracleType.Number)).Value = 7369
command.Parameters.Add(New OracleParameter("IO_CURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output
reader = command.ExecuteReader()
While (reader.Read())
' Do something with the values.
End While
reader.Close()
connection.Close()
End Sub
這個 Visual Basic 範例會執行會傳回兩 REF CURSOR
個參數的 PL/SQL 預存程式,並使用 讀取值 OracleDataReader 。
Private Sub ReadOracleData(ByVal connectionString As String)
Dim dataSet As New DataSet()
Dim connection As New OracleConnection(connectionString)
Dim command As New OracleCommand()
Dim reader As OracleDataReader
connection.Open()
command.Connection = connection
command.CommandText = "CURSPKG.OPEN_TWO_CURSORS"
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add(New OracleParameter("EMPCURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output
command.Parameters.Add(New OracleParameter("DEPTCURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output
reader = command.ExecuteReader(CommandBehavior.CloseConnection)
While (reader.Read())
' Do something with the values.
End While
reader.NextResult()
While (reader.Read())
' Do something with the values.
End While
reader.Close()
connection.Close()
End Sub
此 C# 範例會建立 Oracle 資料表,並使用資料載入它。 您必須先執行此範例,再執行後續範例,示範如何使用 OracleDataReader 使用 OracleType 結構來存取資料。
public void Setup(string connectionString)
{
OracleConnection connection = new OracleConnection(connectionString);
try
{
connection.Open();
OracleCommand command = connection.CreateCommand();
command.CommandText ="CREATE TABLE OracleTypesTable (MyVarchar2 varchar2(3000),MyNumber number(28,4) PRIMARY KEY,MyDate date, MyRaw raw(255))";
command.ExecuteNonQuery();
command.CommandText ="INSERT INTO OracleTypesTable VALUES ('test', 2, to_date('2000-01-11 12:54:01','yyyy-mm-dd hh24:mi:ss'), '0001020304')";
command.ExecuteNonQuery();
command.CommandText="SELECT * FROM OracleTypesTable";
}
catch(Exception)
{
}
finally
{
connection.Close();
}
}
這個 C# 範例會使用 OracleDataReader 來存取資料,並使用數 OracleType 個結構來顯示資料。
public void ReadOracleTypesExample(string connectionString)
{
OracleConnection connection = new OracleConnection(connectionString);
connection.Open();
OracleCommand command = connection.CreateCommand();
try
{
command.CommandText = "SELECT * FROM OracleTypesTable";
OracleDataReader reader = command.ExecuteReader();
reader.Read();
//Using the Oracle specific getters for each type is faster than
//using GetOracleValue.
//First column, MyVarchar2, is a VARCHAR2 data type in Oracle Server
//and maps to OracleString.
OracleString oraclestring1 = reader.GetOracleString(0);
Console.WriteLine("OracleString " + oraclestring1.ToString());
//Second column, MyNumber, is a NUMBER data type in Oracle Server
//and maps to OracleNumber.
OracleNumber oraclenumber1 = reader.GetOracleNumber(1);
Console.WriteLine("OracleNumber " + oraclenumber1.ToString());
//Third column, MyDate, is a DATA data type in Oracle Server
//and maps to OracleDateTime.
OracleDateTime oracledatetime1 = reader.GetOracleDateTime(2);
Console.WriteLine("OracleDateTime " + oracledatetime1.ToString());
//Fourth column, MyRaw, is a RAW data type in Oracle Server and
//maps to OracleBinary.
OracleBinary oraclebinary1 = reader.GetOracleBinary(3);
//Calling value on a null OracleBinary throws
//OracleNullValueException; therefore, check for a null value.
if (oraclebinary1.IsNull==false)
{
foreach(byte b in oraclebinary1.Value)
{
Console.WriteLine("byte " + b.ToString());
}
}
reader.Close();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
connection.Close();
}
}
屬性
Depth |
取得值,表示目前資料列的巢狀深度。 |
FieldCount |
取得目前資料列中的資料行數目。 |
HasRows |
取得值,指出 OracleDataReader 是否包含一個或多個資料列。 |
IsClosed |
指出 OracleDataReader 是否關閉。 |
Item[Int32] |
提供資料行序數,取得使用原生格式的指定資料行值。 |
Item[String] |
提供資料行名稱,取得使用原生格式的指定資料行值。 |
RecordsAffected |
取得因執行 SQL 陳述式所變更、插入或刪除的資料列數目。 |
VisibleFieldCount |
取得 DbDataReader 中沒有隱藏的欄位數。 (繼承來源 DbDataReader) |
方法
Close() |
關閉 OracleDataReader 物件。 |
CloseAsync() |
非同步關閉 DbDataReader 物件。 (繼承來源 DbDataReader) |
CreateObjRef(Type) |
建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。 (繼承來源 MarshalByRefObject) |
Dispose() |
釋放此物件所使用的資源。 |
Dispose() |
釋放 DbDataReader 類別目前的執行個體所使用的全部資源。 (繼承來源 DbDataReader) |
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) |
從指定的緩衝區位移開始,將來自指定資料行位移的字元資料流讀取到緩衝區以做為陣列。 |
GetColumnSchemaAsync(CancellationToken) |
這是 GetColumnSchema(DbDataReader) 的非同步版本。
提供者應該覆寫為適當的實作。
您可以選擇性地接受 |
GetData(Int32) |
傳回指定之資料行序數的 IDataReader。 |
GetData(Int32) |
傳回所要求資料行的巢狀資料讀取器。 (繼承來源 DbDataReader) |
GetDataTypeName(Int32) |
取得來源資料型別的名稱。 |
GetDateTime(Int32) |
取得指定之資料行的值做為 |
GetDbDataReader(Int32) |
傳回所要求資料行序數的 DbDataReader 物件,可使用提供者特定的實作 (Implementation) 覆寫。 (繼承來源 DbDataReader) |
GetDecimal(Int32) |
取得指定之資料行的值做為 |
GetDouble(Int32) |
從指定的資料行取得雙精確度浮點數形式的值。 |
GetEnumerator() |
傳回 IEnumerator,可用來逐一查看資料讀取器中的資料列。 |
GetFieldType(Int32) |
取得 Type,即是物件的資料型別。 |
GetFieldValue<T>(Int32) |
取得所指定資料行值作為要求類型。 (繼承來源 DbDataReader) |
GetFieldValueAsync<T>(Int32) |
以非同步方式取得所指定資料行的值作為要求類型。 (繼承來源 DbDataReader) |
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) |
取得指定資料行的名稱。 |
GetOracleBFile(Int32) |
取得做為 OracleBFile 物件的指定資料行值。 |
GetOracleBinary(Int32) |
取得做為 OracleBinary 物件的指定資料行值。 |
GetOracleDateTime(Int32) |
取得做為 OracleDateTime 物件的指定資料行值。 |
GetOracleLob(Int32) |
取得做為 OracleLob 物件的指定資料行值。 |
GetOracleMonthSpan(Int32) |
取得做為 OracleMonthSpan 物件的指定資料行值。 |
GetOracleNumber(Int32) |
取得做為 OracleNumber 物件的指定資料行值。 |
GetOracleString(Int32) |
取得做為 OracleString 物件的指定資料行值。 |
GetOracleTimeSpan(Int32) |
取得做為 OracleTimeSpan 物件的指定資料行值。 |
GetOracleValue(Int32) |
取得使用 Oracle 格式的指定序數的資料行值。 |
GetOracleValues(Object[]) |
取得目前資料列中使用 Oracle 格式的所有屬性 (Attribute) 資料行。 |
GetOrdinal(String) |
提供資料行的名稱,取得資料行序數。 |
GetProviderSpecificFieldType(Int32) |
取得 |
GetProviderSpecificValue(Int32) |
取得 |
GetProviderSpecificValues(Object[]) |
取得物件的陣列,這些物件是基礎提供者特定值的表示。 |
GetSchemaTable() |
傳回 DataTable,描述 OracleDataReader 的資料行中繼資料 (Metadata)。 |
GetSchemaTableAsync(CancellationToken) |
這是 GetSchemaTable() 的非同步版本。
提供者應該覆寫為適當的實作。
您可以選擇性地接受 |
GetStream(Int32) |
取得資料流以從指定的資料行擷取資料。 (繼承來源 DbDataReader) |
GetString(Int32) |
取得指定的資料行值做為字串。 |
GetTextReader(Int32) |
取得文字讀取器以從資料行擷取資料。 (繼承來源 DbDataReader) |
GetTimeSpan(Int32) |
取得指定的資料行值做為 |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
GetValue(Int32) |
取得使用原生格式的指定序數的資料行值。 |
GetValues(Object[]) |
使用目前資料列的資料行值填入物件陣列。 |
InitializeLifetimeService() |
已淘汰.
取得存留期服務物件,以控制這個執行個體的存留期原則。 (繼承來源 MarshalByRefObject) |
IsDBNull(Int32) |
取得值,指出資料行是否含有不存在或遺漏的值。 |
IsDBNullAsync(Int32) |
以非同步方式取得值,指出資料行是否包含不存在或遺漏的值。 (繼承來源 DbDataReader) |
IsDBNullAsync(Int32, CancellationToken) |
以非同步方式取得值,指出資料行是否包含不存在或遺漏的值。 (繼承來源 DbDataReader) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
MemberwiseClone(Boolean) |
建立目前 MarshalByRefObject 物件的淺層複本。 (繼承來源 MarshalByRefObject) |
NextResult() |
將 OracleDataReader 向前移動到下一個結果。 |
NextResultAsync() |
在讀取陳述式批次的結果時,以非同步方式將讀取器向前移到下一個結果。 (繼承來源 DbDataReader) |
NextResultAsync(CancellationToken) |
在讀取陳述式批次的結果時,以非同步方式將讀取器向前移到下一個結果。 (繼承來源 DbDataReader) |
Read() |
將 OracleDataReader 推進到下一筆記錄。 |
ReadAsync() |
以非同步方式將讀取器向前移到結果集中的下一筆記錄。 (繼承來源 DbDataReader) |
ReadAsync(CancellationToken) |
以非同步方式將讀取器向前移到結果集中的下一筆記錄。 (繼承來源 DbDataReader) |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |
明確介面實作
IDataRecord.GetData(Int32) |
如需這個成員的說明,請參閱 GetData(Int32)。 (繼承來源 DbDataReader) |
IEnumerable.GetEnumerator() |
傳回逐一查看集合的列舉值。 |
擴充方法
CanGetColumnSchema(DbDataReader) |
取得值,指出 DbDataReader 是否可取得資料行結構描述。 |
GetColumnSchema(DbDataReader) |
取得 DbDataReader 的資料行結構描述 (DbColumn 集合)。 |
Cast<TResult>(IEnumerable) |
將 IEnumerable 的項目轉換成指定的型別。 |
OfType<TResult>(IEnumerable) |
根據指定的型別來篩選 IEnumerable 的項目。 |
AsParallel(IEnumerable) |
啟用查詢的平行化作業。 |
AsQueryable(IEnumerable) |
將 IEnumerable 轉換成 IQueryable。 |
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應