OracleDataAdapter-Klasse
Stellt eine Gruppe von Datenbefehlen und eine Verbindung mit der Datenbank dar, die zum Auffüllen des DataSet und zum Aktualisieren der Datenbank verwendet werden. Die Klasse kann nicht geerbt werden.
Namespace: System.Data.OracleClient
Assembly: System.Data.OracleClient (in system.data.oracleclient.dll)
Syntax
'Declaration
Public NotInheritable Class OracleDataAdapter
Inherits DbDataAdapter
Implements IDbDataAdapter, IDataAdapter, ICloneable
'Usage
Dim instance As OracleDataAdapter
public sealed class OracleDataAdapter : DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable
public ref class OracleDataAdapter sealed : public DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable
public final class OracleDataAdapter extends DbDataAdapter implements IDbDataAdapter, IDataAdapter,
ICloneable
public final class OracleDataAdapter extends DbDataAdapter implements IDbDataAdapter, IDataAdapter,
ICloneable
Hinweise
Der OracleDataAdapter bildet eine Verbindung zwischen einem DataSet und einer Datenbank, über die Daten abgerufen und gespeichert werden. Der OracleDataAdapter stellt diese Verbindung bereit, indem er mit Fill Daten aus der Datenbank in das DataSet lädt und im DataSet vorgenommene Änderungen mit Update zurück an die Datenquelle sendet.
Wenn der OracleDataAdapter ein DataSet füllt, erstellt er die für die zurückgegebenen Daten erforderlichen Tabellen und Spalten, sofern diese nicht bereits vorhanden sind. Primärschlüsselinformationen sind jedoch im implizit erstellten Schema nur enthalten, wenn die MissingSchemaAction-Eigenschaft auf AddWithKey festgelegt ist. Das Schema von DataSet kann, einschließlich Primärschlüsselinformationen, auch durch den OracleDataAdapter erstellt werden, bevor es mithilfe von FillSchema mit Daten gefüllt wird. Weitere Informationen finden Sie unter Hinzufügen vorhandener Einschränkungen zu einem DataSet.
Hinweis
Standardmäßig werden numerische Felder, die mithilfe von Fill in eine DataTable importiert werden, OracleNumber-Objekten zugeordnet. Ein Überlauf der OracleNumber sowie das Auslösen einer Oracle-Ausnahme sind möglich, wenn ein numerischer Nicht-Ganzzahltyp importiert wird, der entweder zu groß ist oder eine zu hohe Genauigkeit für die Genauigkeitseinschränkungen der OracleNumber aufweist. Weitere Informationen finden Sie in der Beschreibung zu OracleNumber.
Der OracleDataAdapter enthält außerdem die Eigenschaften SelectCommand, InsertCommand, DeleteCommand, UpdateCommand und TableMappings, mit denen das Laden und Aktualisieren von Daten ermöglicht wird.
Der .NET Framework-Datenprovider für Oracle unterstützt keine SQL-Stapelanweisungen. Er ermöglicht jedoch die Verwendung mehrerer REF CURSOR-Ausgabeparameter zum Füllen eines DataSet in der jeweils eigenen DataTable. Sie müssen die Parameter definieren, diese als Ausgabeparameter markieren und angeben, dass sie REF CURSOR-Datentypen sind. Beachten Sie, dass die Update-Methode nicht verwendet werden kann. wenn der OracleDataAdapter mithilfe von REF CURSOR-Parametern gefüllt wird, die von einer gespeicherten Prozedur zurückgegeben werden, da von Oracle nicht die erforderlichen Informationen zum Bestimmen des Tabellennamens und der Spaltennamen bei Ausführung der SQL-Anweisung bereitgestellt werden. Im folgenden C#-Beispiel wird davon ausgegangen, dass folgende gespeicherte Prozedur erstellt wurde:
Erstellen Sie das folgende Oracle-Paket auf dem Oracle-Server.
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;
/
Erstellen Sie den folgenden Oracle-Paketkörper auf dem Oracle-Server.
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;
/
Das folgende C#-Beispiel veranschaulicht, wie Sie mit der gespeicherten Prozedur Tabellen- und Spalteninformationen abrufen können.
// 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);
Das folgende Visual Basic-Beispiel veranschaulicht, wie Sie einen OracleDataAdapter verwenden, um ein DataSet mithilfe von Oracle-REF CURSOR zu füllen. In diesen Beispielen werden Tabellen verwendet, die gemäß dem Oracle Scott/Tiger-Schema definiert sind und für die das folgende PL/SQL-Paket und der folgende Paketkörper erforderlich sind. Sie müssen diese auf dem Server erstellen, um die Beispiele ausführen zu können.
Erstellen Sie das folgende Oracle-Paket auf dem Oracle-Server.
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;
/
Erstellen Sie den folgenden Oracle-Paketkörper auf dem Oracle-Server.
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;
/
In diesem Visual Basic-Beispiel wird eine gespeicherte PL/SQL-Prozedur ausgeführt, die zwei REF CURSOR-Parameter zurückgibt. Außerdem wird ein DataSet mit den zurückgegebenen Zeilen gefüllt.
' 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)
Nach dem Verwenden des OracleDataAdapter zum Durchführen einer Fill-Operation oder einer FillSchema-Operation gibt die DataColumn.ReadOnly-Eigenschaft immer False zurück, unabhängig davon, ob die Spalte aktualisiert werden kann, da der Oracle-Server diese Informationen nicht zurückgibt.
Vererbungshierarchie
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DataAdapter
System.Data.Common.DbDataAdapter
System.Data.OracleClient.OracleDataAdapter
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1
Siehe auch
Referenz
OracleDataAdapter-Member
System.Data.OracleClient-Namespace
OracleConnection-Klasse
OracleCommand-Klasse