
A példaprogram használata előtt létre kell hozni egy SOUSER sémát az Oracle adatbázis-rendszerünkben, és fel kell ruházni DBA jogosultsággal. A sémába bejelentkezve le kell futtatni a mellékelt Oracle.sql nevű parancsállományt a hivatkozott objektumok létrehozásához.
Áttekintés
A Microsoft által elkészített névtér a System.Data.OracleClient nevet viseli, és cikkünk írásakor a következő Webcímen volt elérhető, mely természetesen megváltozhatott: http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/940/msdncompositedoc.xml.
Letöltve az állományt (Oracle_net.msi) telepítenünk kell a .NET Framework alá. Az öntelepítő állomány erről gondoskodik, a használható .DLL állomány (System.Data.OracleClient.dll), és a kapcsolódó dokumentáció alapértelmezésben a következő mappába kerül: %winroot%:\Program Files\Microsoft.NET\OracleClient.Net\.
A telepített assembly bekerül a globális assembly listába, így amikor referenciaként megadjuk alkalmazásainkban, akkor a globális palettáról kell kiválasztanunk, nem pedig valamilyen alternatív mappából.
A mellékelt dokumentáció tartalmazza a telepítésre, valamint a használatba vételre vonatkozó instrukciókat, illetve tartalmaz egy – az MSDN felépítésével megegyező szerkezetű – referenciát is a névtérben megtalálható osztályokról, ezek metódusairól, property-jeiről és néhány példát.
A telepítéssel kapcsolatban meg kell említeni, hogy rendelkeznünk kell telepített .NET Framework-kel a számítógépen, és ajánlatos rendelkeznünk a Microsoft Data Access Components (MDAC) 2.7-es verziójával is.
Összességében elmondható, hogy a használható adattípusok köre jól lefedi az Oracle rendszer által támogatott adattípusokat. Ezeket a gyakorlatban az OracleType felsorolt típuson keresztül érhetjük el. Érdekességként említhető, hogy találunk egy OracleBFile nevű adattípust, mellyel kezelni tudjuk az Oracle BFile típusú oszlopaiban tárolt értékeket, vagyis a maximálisan 4 GB méretű, bináris adatot tartalmazó oszlopértékeket is.
A névtér osztályai között tehát megtalálhatjuk a típuskezelő osztályokat (OracleBFile, OracleLob, OracleBinary, OracleString, OracleNumber,…), valamint az adatbázis kapcsolat létrehozását, a DML utasításokat, és a logikai adattáblák feltöltését végző osztályokat egyaránt. Az osztályok metódusai szignatúrájukat tekintve szinte azonosak a System.Data névtér már ismert névtereiben megtalálható osztályok metódusaiéval, így felhasználásuk egyszerű.
Gyakorlati felhasználás
A mellékelt alkalmazásban a létrehozott Table1 adattáblát tartalmazó SOUSER sémával építünk fel egy kapcsolatot, valamint bemutatjuk, hogy a névtér osztályaival hogyan szúrhatunk be rekordokat a táblába.
Miután referenciaként alkalmazásunkhoz csatoltuk a megfelelő assembly-t, gondoskodnunk kell arról, hogy ezt el is érjük:
...
using System.Data.OracleClient;
Deklarálnunk kell azokat az objektumokat melyekkel a kapcsolat felépíthető, valamint a DML utasítás futtatható. Ehhez szükség van egy adatbáziskapcsolat objektumra:
private OracleConnection connect = new OracleConnection("Password=SOUSER;User ID=SOUSER;Data Source=SOSERVER");
Egy adapter objektumra, mellyel a már ismert módon feltölthető a logikai adattábla:
private OracleDataAdapter ad;
Az Oracle.sql script lefuttatása után az adatbázisba kerülő, az új rekord beszúrását végző tárolt eljárást futtató objektum pedig a következő:
private OracleCommand Command = new OracleCommand();
A program indulásakor, illetve egy-egy rekord beszúrása után frissítenünk kell a DataTable objektum tartalmát, hogy a Form DataGrid kontroljában mindig az aktuális táblatartalom legyen látható. Ennek érdekében a műveletet egy saját metódusba ágyaztuk (Fill), melyben először példányosítjuk az adapter objektumot a megfelelő lekérdező utasítással:
ad = new OracleDataAdapter("SELECT * FROM PRODUCTS",connect);
Majd a .NET beépített osztályaiból már ismert módon, az objektum Fill metódusával feltöltjük az adott táblát:
Az adatbevitelt tehát egy tárolt eljárással végezzük el, így az OracleCommand objektumunkat megfelelően paramétereznünk kell. A többi property megadása nem okoz gondot; először megadjuk a Connection property értékét:
Command.Connection = connect;
Meghatározzuk az elvégzendő művelet típusát, és az eljárás nevét:
Command.CommandType = CommandType.StoredProcedure;
Command.CommandText = "InsertProduct";
Létrehozunk egy paraméter objektumot, melynek property-jei tartalmazzák a bemenő paraméter adatait, úgymint a paraméter nevét és típusát:
OracleParameter setParam = new OracleParameter();
setParam.ParameterName = "p_name";
setParam.Direction = ParameterDirection.Input;
Példánkban egy karakterlánc kerül átadásra a tárolt eljárás bemenő paraméterén keresztül, így az adat típusát varchar-ként kell megadnunk:
setParam.OracleType = OracleType.VarChar;
setParam.Size = 50;
A paraméter értéke pedig a szövegmezőben megadott érték lesz:
setParam.Value = nameText.Text;
A paramétert fel kell fűznünk az OracleCommand objektum Parameters listájára:
Command.Parameters.Add(setParam);
Nincs más hátra, mint a kapcsolat életre keltésével, és a DML utasítás elvégzésével beszúrni a rekordot a táblába. Ehhez is a már ismert ExecuteNonQuery nevű metódust használjuk:
connect.Open();
Command.ExecuteNonQuery();
connect.Close();