C# - ADODB névtér használata

forráskód letöltése
A .NET Framework osztályainak felhasználásával minden eddiginél egyszerűbben tudunk adatokat kezelni, adatbázisokkal összefüggő műveletek elvégzésekor. A régebbi rendszerek többsége azonban nem ismeri a DataSet, vagy DataTable osztályok által reprezentált adatstruktúrákat. Annak érdekében, hogy alkalmazásunk a régebbi rendszerekkel is kompatibilis maradjon, használhatunk egy ADODB nevű névteret, melyet cikkünkben bemutatunk.
A példához szükséges a ContactDB adatbázis, melyet a mellékelt Run.cmd BATCH állomány lefuttatásával hozhatunk létre. Csak arra kell ügyelni, hogy a ContactDB.sql parancsállomány a BATCH állománnyal azonos mappában legyen. A ContactDB.sql parancsállomány 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
A névtér felhasználásához referenciaként hozzá kell adni az alkalmazáshoz az ADODB.DLL assembly-t, melyet a referencia hozzáadáskor felbukkanó ablak .NET füle alatt található listából választhatunk ki.
A projekt által generálta assembly mellett nem jön létre lokális másolat, hiszen a hivatkozott assembly a GAC-ban található.
A mellékelt példában a ContactDb adatbázis Table1 táblájának adatait kérdezzük le a névtér Recordset osztálya segítségével, majd megjelenítjük egy DataGrid kontrolban.
A Table1 tábla NAME és EMAIL oszlopába adatokat is szúrhatunk be, ha megadjuk a két értéket, majd megnyomjuk a MŰVELET gombot.
Mindkét művelethez szükségünk lesz egy karakterláncra, mely tartalmazza az adatbázis eléréshez szükséges információkat. A karakterláncban a Provider kulcsszó után megadott érték a legfontosabb. SQL Server esetén ez SQLOLEDB.1 lesz.

connectStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ContactDb;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;";
A műveletekhez példányosítunk egy Recordset objektumot.
rs = new ADODB.Recordset();
Megadjuk, hogy milyen SQL utasítást kell elvégezni az adattáblán, melynek eredménye a lekérdező műveletekben egy adathalmaz.
commandStr = "SELECT * FROM Table1";
Majd a Recordset objektum Open metódusával elvégezzük a műveletet.
rs.Open(commandStr, connectStr, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 0);
Látható, hogy a metódus harmadik paraméterében információkat adhatunk a kurzorra vonatkozóan, míg a negyedik paraméterben az egyes rekordok lock-olásáról rendelkezhetünk.
Az adatok azonban így nem adhatók át adatforrásként a DataGrid objektumnak, át kell őket tenni egy DataTable objektumba.
dt = new DataTable();
dt.Columns.Add(new DataColumn("ID",Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("Name",Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("Email",Type.GetType("System.String")));
DataRow dr;
A DataTable objektum egyes rekordjaiba a Recordset Fields kollekciójának megfelelő elemeit helyezhetjük el. Kicsit hasonlít ez az MFC adatkezeléséhez.
while (!rs.EOF)
{
  dr = dt.NewRow();
  dr[0] = rs.Fields["ID"].Value;
  dr[1] = rs.Fields["Name"].Value;
  dr[2] = rs.Fields["Email"].Value;
  dt.Rows.Add(dr);
  rs.MoveNext();       
}
rs.Close();
dataGrid1.DataSource = dt.DefaultView;
A rekordok beszúrásakor csupán az SQL utasítás lesz INSERT, a többi paraméter változatlan.
commandStr = "INSERT INTO Table1 VALUES('" + textBox1.Text + "','" + textBox2.Text + "')";
A rekord beszúrása után töröljük a DataTable adatait, majd újra feltöltjük azt a Table1 tábla adathalmazával.