HyperLink


Bejelentkezés
E-mail: 
Jelszó: 






Skip Navigation Links
 

Adatmódosító műveletek


ADO.NET 3. rész

Példaprogram letöltése

18281 bájt

A sorozat ezt megelőző számában már eljutottunk az adatbázissal történő kapcsolat felvételhez, illetve már egy egyszerű lekérdezést is megfogalmaztunk, megismerve az OleDbConnection osztály jellemzőit. Sorozatunknak ezen számában bemutatjuk, hogy milyen módon végezhetünk el adatmódosító műveleteket az adatbázis tábláin, illetve ismertetjük ennek kapcsán az adapter osztályok jelentőségét, jellemzőit.

A mellékelt példában a korábban megismert Products nevű, Microsoft Access állományban található adattáblához kapcsolódunk, mely most csak néhány rekordot tartalmaz. A tábla adatain műveleteket fogunk végezni: lekérdezést, rekordtörlést, valamint adatmódosítást és adatbeszúrást.
A következőkben bemutatjuk, milyen jelentősebb property-jeit állíthatjuk be a DataAdapter osztálynak, valamint megismerhetjük metódusait. A DataAdapter osztály az OleDbDataAdapter osztály őse. A következőkben megadott property-k és metódusok a gyermekosztályban újabbakkal egészülnek ki.
ContinueUpdateOnError
Osztály: DataAdapter
public bool ContinueUpdateOnError {get; set;}
Megadhatjuk, hogy folytatódjon-e a művelet az adatsorok frissítésekor, ha valamely rekord módosítása hibát okoz. TRUE esetében nem generálódik kivétel.
AcceptChangesDuringFill
Osztály: DataAdapter
public bool AcceptChangesDuringFill {get; set;}
Megadható, hogy hívódjon-e meg az AcceptChanges metódus minden egyes rekordbeszúrás után, amikor a Fill metódust meghívjuk. Az AcceptChanges metódussal jelezhetjük, hogy a legutoljára beszúrt rekord már ne új rekordként szerepeljen a kollekcióban. Ennek fontosságáról a sorozat későbbi számaiban szólunk.
MissingMappingAction
Osztály: DataAdapter
public virtual MissingMappingAction MissingMappingAction {get; set;}
Megadható, hogy mi történjen akkor, ha a beszúrandó rekord szerkezete nem azonos a fogadó adattábla, vagy rekordkollekció szerkezetével. Háromféle értéket adhatunk meg:
  • Error: az InvalidOperationException kivétel generálódik.
  • Ignore: figyelmen kívül marad az adat, és nem kerül be az adathalmazba
  • Passthrough: létrejön a megfelelő oszlop, vagy a megfelelő szerkezetű tábla és a DataSet-hez adódik.
TableMappings
Osztály: DataAdapter
public DataTableMappingCollection TableMappings {get;}
A property segítségével megadható a kapcsolat a forrás adattábla és a DataTable objektum között.
Ezeken a property-ken kívül a gyermekosztályban megtalálhatók még a következők:
  • DeleteCommand
  • InsertCommand
  • SelectCommand
  • UpdateCommand
A property-k mindegyike OleDbCommand típusú, melyek segítségével elvégezhetjük a különböző adatmanipulációs műveleteket az adatforráson.
Az OleDbDataAdapter osztályban a leggyakrabban használt metódus a következő:
Fill
Osztály: DataAdapter
public abstract int Fill(
DataSet dataSet
);
Az osztály SelectCommand property-jén keresztül elérhető objektum által elvégzett lekérdezés eredményadatai bekerülnek a paraméterben megadott memóriabeli tárolóba.
Paraméterek
DataSet dataSet
A memóriabeli adathalmaz, melybe a lekérdezés műveletének eredménye kerül.
Visszatérési érték
Az adathalmazba sikeresen beszúrt rekordok száma.
Az objektumok a következő property-kkel rendelkeznek.
CommandText
Osztály: OleDbCommand
public virtual string CommandText {get; set;}
Ebben a property-ben fogalmazhatjuk meg az SQL utasítást, amennyiben az utasítás szöveges.
CommandTimeout
Osztály: OleDbCommand
public virtual int CommandTimeout {get; set;}
A megadott SQL utasítás végrehajtásának türelmi ideje, ha az nem hajtódik végre azonnal. Az alapértelmezett érték 30 másodperc.
CommandType
Osztály: OleDbCommand
public virtual CommandType CommandType {get; set;}
A végrehajtandó utasítás típusa. Értékei lehetnek: Text (szöveg), StoredProcedure (tárolt eljárás).
Connection
Osztály: OleDbCommand
public OleDbConnection Connection {get; set;}
Az adatbázis-kapcsolat felépítését lehetővé tevő objektum adható itt meg.
Parameters
Osztály: OleDbCommand
public OleDbParameterCollection Parameters {get;}
Amennyiben az utasítás típusát tárolt eljárásra választjuk, akkor itt adhatjuk meg a paramétereket.
Transaction
Osztály: OleDbCommand
public OleDbTransaction Transaction {get; set;}
A kapcsolaton belüli tranzakciós objektumot hozhatjuk létre.
Az egyes parancstípusok esetében a leggyakrabban használható metódusok a következők:
Cancel
Osztály: OleDbCommand
public virtual void Cancel();
Törölhető a parancsvégrehajtás.
ExecuteNonQuery
Osztály: OleDbCommand
public virtual int ExecuteNonQuery();
Végrehajtható a nem lekérdezés természetű utasítás.
Visszatérési érték
A sorok száma, melyeket a végrehajtás érint.
ExecuteReader
Osztály: OleDbCommand
public OleDbDataReader ExecuteReader();
A lekérdezés természetű utasítások hajthatók végre a metódussal, melynek eredményére közvetlenül vagyunk kíváncsiak.
Visszatérési érték
Eredménye egy OleDbDataReader objektum, melyben az adatok megtalálhatóak.
ExecuteScalar
Osztály: OleDbCommand
public virtual object ExecuteScalar();
Olyan lekérdezések végezhetők el, melyek egy eredményt adnak vissza.
Visszatérési érték
A lekérdezett érték objektuma.
Látható tehát, hogy a .NET ezen egy objektum esetében is szerteágazóan, és jelentősen segíti az adatbázissal kapcsolatos műveletek elvégzését. Az OleDbDataAdapter osztályról összességében elmondható, hogy mintegy hidat képez a fizikai adathalmaz, és a memóriabeli adattároló adatstruktúrák, és így kvázi a megjelenítés között.
A mellékelt példában egyszerű műveleteket végzünk el, melyek a lényegre koncentrálnak, vagyis arra, hogy a felhasználói felületen végzett műveletek eredménye látható legyen a fizikai adatforrásban is.
Adatmódosítás
Az alkalmazás TabControl-jának első füle alatt módosíthatjuk a ComboBox listában kiválasztott azonosítóval rendelkező rekordokat.
A rekord két másik mezőt tartalmaz, melyeket módosíthatunk úgy, hogy új értékeket adunk meg a szövegmezőkben. Amennyiben nem adunk meg semmit, az adott érték nem módosul. A módosításkor az UpdateCommand objektumot kell használnunk, melynek CommandText property-jét kell megfelelően megadnunk. Az UPDATE SQL utasítás megadása után az ExecuteNonQuery metódust kell meghívnunk.
oleDbConnection1.Open();
oleDbDataAdapter1.UpdateCommand.ExecuteNonQuery();
oleDbConnection1.Close();
A művelet után frissítjük a harmadik fül alatti táblázatot, mely a tábla adatait tartalmazza.
dt.Rows.Clear();
oleDbDataAdapter1.Fill(dt);
dataGrid1.DataSource = dt.DefaultView;
Adatok törlése
Az adott rekord törlésekor a DeleteCommand objektumot kell használnunk.
oleDbDataAdapter1.DeleteCommand.CommandText = "DELETE FROM PRODUCTS WHERE ProductID = " + comboBox1.Text;
A törlés után természetesen frissítjük a ComboBox tartalmát is.
...
UpdateCombo();
Adatbeszúrás
A Form TabControl-jának második füle alatt új rekordot szúrhatunk be a táblázatba. Ennek módja, hogy az InsertCommand objektum CommandText property-jében megadjuk az INSERT utasítást, majd meghívjuk az ExecuteNonQuery metódust.
oleDbDataAdapter1.InsertCommand.CommandText = "INSERT INTO PRODUCTS VALUES (" + textBox5.Text + ",'" + textBox4.Text + "'," + textBox3.Text + ")";
...
oleDbConnection1.Open();
oleDbDataAdapter1.InsertCommand.ExecuteNonQuery();
oleDbConnection1.Close();
Majd a frissítés következik, hogy a megjelenített adatok is fedjék a valóságot.
dt.Rows.Clear();
oleDbDataAdapter1.Fill(dt);
dataGrid1.DataSource = dt.DefaultView;

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 807. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2010 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |