OracleDataAdapter 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
警告
OracleDataAdapter has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260
代表一組資料命令和資料庫連線,用來填入 DataSet 並更新資料庫。 此類別無法獲得繼承。
public ref class OracleDataAdapter sealed : System::Data::Common::DbDataAdapter, System::Data::IDbDataAdapter
public ref class OracleDataAdapter sealed : System::Data::Common::DbDataAdapter, ICloneable
public sealed class OracleDataAdapter : System.Data.Common.DbDataAdapter, System.Data.IDbDataAdapter
public sealed class OracleDataAdapter : System.Data.Common.DbDataAdapter, ICloneable
[System.Obsolete("OracleDataAdapter has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260", false)]
public sealed class OracleDataAdapter : System.Data.Common.DbDataAdapter, ICloneable
type OracleDataAdapter = class
inherit DbDataAdapter
interface IDbDataAdapter
interface IDataAdapter
type OracleDataAdapter = class
inherit DbDataAdapter
interface IDbDataAdapter
interface IDataAdapter
interface ICloneable
[<System.Obsolete("OracleDataAdapter has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260", false)>]
type OracleDataAdapter = class
inherit DbDataAdapter
interface IDbDataAdapter
interface IDataAdapter
interface ICloneable
Public NotInheritable Class OracleDataAdapter
Inherits DbDataAdapter
Implements IDbDataAdapter
Public NotInheritable Class OracleDataAdapter
Inherits DbDataAdapter
Implements ICloneable
- 繼承
- 屬性
- 實作
備註
此類型已被取代,將在未來的 .NET Framework 版本中移除。 如需詳細資訊,請參閱 Oracle 和 ADO.NET。
OracleDataAdapter做為 DataSet 與資料庫之間的網橋,用於擷取和儲存數據。 提供 OracleDataAdapter 此網橋,方法是使用 Fill 將數據從資料庫 DataSet載入 ,並使用 Update 將所做的 DataSet 變更傳回數據源。
OracleDataAdapter當 填滿 DataSet時,如果傳回的數據不存在,它會為傳回的數據建立必要的數據表和數據行。 不過,除非 屬性設定AddWithKey為 ,否則MissingSchemaAction主鍵資訊不會包含在隱含建立的架構中。 您也可以先 OracleDataAdapter 建立的 DataSet架構,包括主鍵資訊,再使用 FillSchema填入數據。 如需詳細資訊,請參閱 將現有條件約束新增至數據集。
注意
根據預設,匯入至 的Fill數值欄位會對應至 DataTableOracleNumber 物件。 藉由匯入太大或太高精確度的非整數數值,即可溢位 OracleNumber,並擲回 Oracle 例外狀況,以達到 OracleNumber有效位數限制。 如需詳細資訊,請參閱 的描述 OracleNumber 。
OracleDataAdapter也包含 SelectCommand、InsertCommand、DeleteCommand、 UpdateCommand和 TableMappings
屬性,以協助載入和更新數據。
.NET Framework Oracle 資料提供者不支援批處理的 SQL 語句。 不過,它可讓您使用多個 REF CURSOR
輸出參數來填滿 DataSet,每個參數都有自己的 DataTable。 您必須定義參數、將它們標示為輸出參數,並指出它們是 REF CURSOR
數據類型。 請注意,當 使用REF CURSOR
預存程式傳回的參數填滿 時OracleDataAdapter,您無法使用 Update 方法,因為 Oracle 不會提供判斷 SQL 語句執行時數據表名稱和數據行名稱所需的資訊。 下列 C# 範例假設您已建立此預存程式。
在 Oracle 伺服器上建立下列 Oracle 封裝。
CREATE OR REPLACE PACKAGE CURSPKG AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
IO_CURSOR 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;
/
下列 C# 範例示範如何使用預存程式取得數據表和數據行資訊。
// GetConnectionString() returns a connection string for
// the data source.
string connString = GetConnectionString();
DataSet ds = new DataSet();
OracleConnection conn = new OracleConnection(connString);
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "CURSPKG.OPEN_TWO_CURSORS";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("EMPCURSOR", OracleType.Cursor).Direction =
ParameterDirection.Output;
cmd.Parameters.Add("DEPTCURSOR", OracleType.Cursor).Direction =
ParameterDirection.Output;
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.TableMappings.Add("Table", "Emp");
da.TableMappings.Add("Table1", "Dept");
da.Fill(ds);
ds.Relations.Add("EmpDept", ds.Tables["Dept"].Columns["Deptno"],
ds.Tables["Emp"].Columns["Deptno"], false);
下列 Visual Basic 範例示範如何使用 OracleDataAdapter 使用 Oracle REF CURSOR
填滿 DataSet 。 這些範例會使用 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 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 預存程式,並以傳回的數據列填滿 DataSet 。
' GetConnectionString() returns a connection string for
' the data source.
Dim connString As New String(GetConnectionString())
Dim ds As New DataSet()
Dim conn As New OracleConnection(connString)
Dim cmd As OracleCommand = conn.CreateCommand()
cmd.CommandText = "CURSPKG.OPEN_TWO_CURSORS"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("EMPCURSOR", OracleType.Cursor).Direction = _
ParameterDirection.Output
cmd.Parameters.Add("DEPTCURSOR", OracleType.Cursor).Direction = _
ParameterDirection.Output
Dim da As New OracleDataAdapter(cmd)
da.TableMappings.Add("Table", "Emp")
da.TableMappings.Add("Table1", "Dept")
da.Fill(ds)
ds.Relations.Add("EmpDept", ds.Tables("Dept").Columns("Deptno"), _
ds.Tables("Emp").Columns("Deptno"), False)
使用 OracleDataAdapter 來執行 Fill
或 FillSchema
作業之後, DataColumn.ReadOnly
不論是否可以更新數據行,屬性一律會傳回 false,因為 Oracle 伺服器不會傳回這項資訊。
建構函式
OracleDataAdapter() |
已淘汰.
初始化 OracleDataAdapter 類別的新執行個體。 |
OracleDataAdapter(OracleCommand) |
已淘汰.
使用指定的 SQL SELECT 陳述式來初始化 OracleDataAdapter 類別的新執行個體。 |
OracleDataAdapter(String, OracleConnection) |
已淘汰.
使用 SQL SELECT 陳述式和 OracleDataAdapter 初始化 OracleConnection 類別的新執行個體。 |
OracleDataAdapter(String, String) |
已淘汰.
使用 SQL SELECT 陳述式和連接字串來初始化 OracleDataAdapter 類別的新執行個體。 |
欄位
DefaultSourceTableName |
已淘汰.
資料表對應之 DataAdapter 物件所使用的預設名稱。 (繼承來源 DbDataAdapter) |
屬性
AcceptChangesDuringFill |
已淘汰.
取得或設定值,指出在任何一種 Fill 作業期間,當 DataRow 新增至 DataTable 之後,是否要在其上呼叫 AcceptChanges()。 (繼承來源 DataAdapter) |
AcceptChangesDuringUpdate |
已淘汰.
取得或設定在 AcceptChanges() 期間是否呼叫 Update(DataSet)。 (繼承來源 DataAdapter) |
CanRaiseEvents |
已淘汰.
取得值,指出元件是否能引發事件。 (繼承來源 Component) |
Container |
已淘汰.
取得包含 IContainer 的 Component。 (繼承來源 Component) |
ContinueUpdateOnError |
已淘汰.
取得或設定數值,指定當資料列更新期間發生錯誤時,是否產生例外狀況。 (繼承來源 DataAdapter) |
DeleteCommand |
已淘汰.
取得或設定用來在資料庫中刪除資料錄的 SQL 陳述式或預存程序。 |
DesignMode |
已淘汰.
取得值,指出 Component 目前是否處於設計模式。 (繼承來源 Component) |
Events |
已淘汰.
取得附加在這個 Component 上的事件處理常式清單。 (繼承來源 Component) |
FillCommandBehavior |
已淘汰.
取得或設定用來填入資料配接器 (Adapter) 之命令的行為。 (繼承來源 DbDataAdapter) |
FillLoadOption |
已淘汰.
取得或設定 LoadOption,決定配接器如何從 DataTable 填入 DbDataReader。 (繼承來源 DataAdapter) |
InsertCommand |
已淘汰.
取得或設定用來將新的資料錄插入資料庫的 SQL 陳述式或預存程序。 |
MissingMappingAction |
已淘汰.
判斷在傳入的資料不具有相符的資料表或資料行時要採取的動作。 (繼承來源 DataAdapter) |
MissingSchemaAction |
已淘汰.
判斷在現有 DataSet 結構描述 (Schema) 與傳入的資料不相符時要採取的動作。 (繼承來源 DataAdapter) |
ReturnProviderSpecificTypes |
已淘汰.
取得或設定 |
SelectCommand |
已淘汰.
取得或設定用來在資料庫中選取資料錄的 SQL 陳述式或預存程序。 |
Site |
已淘汰.
(繼承來源 Component)
|
TableMappings |
已淘汰.
取得集合,這個集合提供源數據表與 DataTable之間的主要對應。 (繼承來源 DataAdapter) |
UpdateBatchSize |
已淘汰.
取得或設定值,其啟用或停用批次處理支援,並指定可於批次中執行的命令數目。 |
UpdateBatchSize |
已淘汰.
取得或設定值,其啟用或停用批次處理支援,並指定可於批次中執行的命令數目。 (繼承來源 DbDataAdapter) |
UpdateCommand |
已淘汰.
取得或設定用來在資料庫中更新資料錄的 SQL 陳述式或預存程序。 |
方法
事件
Disposed |
已淘汰.
當 Dispose() 方法的呼叫處置元件時,就會發生。 (繼承來源 Component) |
FillError |
已淘汰.
當填入作業期間發生錯誤時傳回。 (繼承來源 DbDataAdapter) |
RowUpdated |
已淘汰.
發生於已經針對資料庫執行命令後的更新作業期間。 |
RowUpdating |
已淘汰.
發生在已經針對資料來源執行命令前的 Update(DataSet) 期間。 |
明確介面實作
ICloneable.Clone() |
已淘汰.
如需這個成員的說明,請參閱 Clone()。 |
ICloneable.Clone() |
已淘汰.
建立目前執行個體複本的新物件。 (繼承來源 DbDataAdapter) |
IDataAdapter.TableMappings |
已淘汰.
取得集合,指出源數據表如何對應至數據集數據表。 (繼承來源 DataAdapter) |
IDbDataAdapter.DeleteCommand |
已淘汰.
如需這個成員的說明,請參閱 DeleteCommand。 |
IDbDataAdapter.InsertCommand |
已淘汰.
如需這個成員的說明,請參閱 InsertCommand。 |
IDbDataAdapter.SelectCommand |
已淘汰.
如需這個成員的說明,請參閱 SelectCommand。 |
IDbDataAdapter.UpdateCommand |
已淘汰.
如需這個成員的說明,請參閱 UpdateCommand。 |