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, CancellationToken) |
以非同步方式取得所指定資料行的值作為要求類型。 (繼承來源 DbDataReader) |
GetFieldValueAsync<T>(Int32) |
以非同步方式取得所指定資料行的值作為要求類型。 (繼承來源 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, CancellationToken) |
以非同步方式取得值,指出資料行是否包含不存在或遺漏的值。 (繼承來源 DbDataReader) |
IsDBNullAsync(Int32) |
以非同步方式取得值,指出資料行是否包含不存在或遺漏的值。 (繼承來源 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。 |