Infrastructura IT pentru întreprinderea dvs.
De îndată ce începem să facem o nouă tehnologie, uităm cum a evoluat și ce este rațional în spatele ei. Urmărind dezvoltarea tehnologiilor de baze de date de la ODBC la ADO.NET, este mai ușor să selectați tehnologia potrivită și să o optimizați pentru propriile scopuri.
În majoritatea sistemelor de proiectare a bazelor de date, aplicațiile se bazează pe un singur tip de bază de date. În astfel de scheme simple, dezvoltatorul de aplicații poate programa direct folosind interfața de sistem a bazei de date. Deși această abordare oferă acces rapid și eficient la date, pot apărea probleme atunci când sarcina se extinde și dezvoltatorul trebuie să modifice programul. Prin această abordare, acest lucru înseamnă că fiecare program gata trebuie să aibă diferite versiuni cu suport pentru diferite tipuri de baze de date. Dacă companiile se extind sau se îmbină între ele, aplicația trebuie să acceseze baze de date bazate pe platforme diferite.
Tehnologia ODBC oferă o interfață comună pentru accesarea bazelor de date SQL eterogene. ODBC utilizează limbajul SQL ca standard pentru accesarea datelor. Figura 1 prezintă arhitectura ODBC. Această interfață este foarte convenabilă: o aplicație poate accesa diverse baze de date SQL printr-un set comun de comenzi. Astfel, dezvoltatorul poate crea și distribui aplicații fără a trebui să fie legat de o bază de date specifică.
Figura 1. Arhitectura ODBC.
De asemenea, puteți adăuga un driver de bază de date, astfel încât aplicația să funcționeze cu baza de date la alegerea utilizatorului. După cum se arată în figura 1, managerul de drivere este o legătură intermediară între aplicație și bazele de date. Interfața ODBC conține un set de funcții care controlează fiecare instrument de bază de date. Dacă aplicația trebuie să schimbe baza de date utilizată, dezvoltatorul înlocuiește pur și simplu un driver cu altul, iar aplicația poate funcționa ca de obicei, fără a fi nevoie să modificați codul programului.
Figura 2. Utilizarea DAO pentru a accesa baza de date.
ODBC utilizează o interfață de nivel scăzut, astfel încât programatorii din C și C ++ să profite într-adevăr de toate avantajele tehnologiei ODBC. Programatorii din Visual Basic (VB) nu au acces ușor la interfața ODBC. Înainte de apariția VB 6.0, dezvoltatorii au folosit acces la date la nivel înalt. Figura 2 arată modul în care programatorii VB folosesc tehnologia Object Access Object (DAO) pentru a accesa datele.
Figura 3. Utilizarea RDO pentru a accesa baza de date.
DAO se bazează pe tehnologia bazei de date Microsoft Jet, un motor de bază de date conceput pentru Microsoft Access. JET a fost prima interfață orientată pe obiecte pentru comunicarea cu Access. Aplicațiile care utilizează Access pot utiliza DAO pentru a accesa direct datele. Din moment ce DAO a fost creat imediat după Access, aplicarea acestei tehnologii este cea mai rapidă și cea mai eficientă modalitate de a accesa bazele de date Access. DAO poate lucra cu alte baze de date decât Access, cum ar fi SQL Server și Oracle. DAO utilizează ODBC, dar deoarece metoda DAO este proiectată special pentru a interacționa cu JET, JET traduce cererile între DAO și ODBC. Acest pas suplimentar de traducere este motivul pentru încetinirea muncii cu baze de date diferite de Access.
Figura 4. Arhitectura ODBCDirect.
Pentru a depăși această limitare, dezvoltatorii Microsoft au creat RDO. Figura 3 arată că RDO accesează API-ul ODBC direct, ocolind JET-ul. Apoi a fost introdus ODBCDirect, extensia DAO, care împinge RDO în fundal. Figura 4 arată modul în care o aplicație DAO, utilizând ODBCDirect, accesează baza de date, ocolind problemele pe care le solicită JET.
Câțiva ani mai târziu, ODBC devine standardul pentru accesul la baza de date client-server. ODBC oferă o interfață standard care necesită funcții SQL și este optimizată pentru metodele SQL. Cu toate acestea, ce se întâmplă dacă aveți nevoie să accesați o bază de date nonrelațională care nu utilizează principiile SQL (de exemplu, Microsoft Exchange Server, a căror stocare nu conține date relațional).
Figura 5. Componente OLE DB.
Probabil, pentru o mai mare confuzie, dezvoltatorii Microsoft au introdus un alt model obiect de acces la date: ADO. ADO funcționează cu obiecte DAO și RDO și sprijină, de asemenea, modele mai simple decât DAO și RDO (deși cu funcționalitate redundantă, astfel încât să puteți efectua operația în mai multe moduri). Ierarhia obiectului în ADO este mai omogenă decât în DAO. ADO conține mai multe obiecte încorporate care simplifică accesul la datele din magazinele de informații.
Figura 6 prezintă mai multe moduri în care o aplicație comunică cu o bază de date. De exemplu, un programator VB poate utiliza ADO pentru a conecta o aplicație la un furnizor OLE DB. Dacă baza de date nu acceptă OLE DB, aplicația poate folosi ODBC. Un programator Visual C ++ poate utiliza ADO sau se poate conecta direct prin OLE DB.
Figura 6. Diferența dintre căile de aplicare în ADO.
Exemplu în ADO
Luați în considerare un exemplu simplu de ADO. Lista 1 arată cum puteți utiliza un obiect tipic - Recordset - obiectul central din ADO. obiect Recordset este un set de înregistrări (tabel) și menține tipuri de cursoare adOpenForwardOnly, adOpenKeyset, adOpenDynamic și adOpenStatic. Cursorul poate fi fie pe partea de server (implicit), fie pe partea clientului.
Pentru a accesa înregistrarea ADO, trebuie să scanați consecutiv rândul. Pentru a accesa mai multe tabele, trebuie să efectuați o interogare JOIN join pentru a obține rezultatul într-un set de rânduri. Deși obiectul Recordset acceptă accesul la date fără a fi conectat la acesta, ADO a fost inițial proiectat pentru datele cu care este stabilită conexiunea. Această metodă de acces vă forțează să stocați resurse importante pe partea de server. În plus, pentru a transfera un set de mulțimi, utilizați metoda de comanda numită comisă de comutare. Comutarea în COM este un proces de conversie a tipurilor de date, care, în mod natural, ocupă resurse de sistem valoroase.
În căutarea unui mecanism de accesare a datelor necorelate, Microsoft extinde ADO și introduce Remote Data Services (RDS). RDS este creat după ADO și permite transferul obiectului Recordset către client (de exemplu, într-un browser Web) atunci când nu există o conexiune activă. Cu toate acestea, RDS, ca ADO, utilizează comanda de comutare COM pentru a trimite un set de șiruri de caractere de la server la client.
Când Microsoft a început să dezvolte .NET Framework, a avut o bună oportunitate de a revizui modelul de acces la date. Decât să nu continue dezvoltarea tehnologiei ADO, experții Microsoft au început să creeze o nouă structură pentru accesul la date, păstrând în același timp un acronim. Microsoft dezvoltă ADO.NET pe baza tehnologiei ADO dovedite. Dar ADO.NET se concentrează asupra a trei caracteristici importante care nu sunt suportate de ADO: suport pentru un model de acces la date care nu sunt legate, care este un element-cheie pentru lucrul pe Web; sprijin pentru integrarea strânsă cu XML; Integrarea cu .NET Framework (de exemplu, compatibilitatea cu biblioteca de clasă de bază a unui sistem tipic).
Arhitectura ADO.NET. Figura 7 prezintă arhitectura ADO.NET. Obiectul Recordset care îndeplinește atât de multe funcții în ADO nu există. În schimb, ADO.NET oferă câteva obiecte speciale care execută sarcini specifice. Tabelul 1 descrie trei dintre ele: DataAdapter, DataReader și DataSet.
Figura 7. Arhitectura ADO.NET.
Furnizori de date NET. O componentă foarte importantă a furnizorului de date ADO.NET, ADO.NET, implementează interfețele ADO.NET. În special, implementează obiectul DataReader astfel încât atât aplicația, cât și obiectul DataSet să o poată utiliza.
Furnizorul de date .NET constă din patru componente principale: Conexiune - pentru a comunica cu sursa de date; Comanda execută comenzi pe sursa de date; DataReader citește date dintr-o sursă de date într-un mod unidirecțional „read only“, și DataAdapter, care citește datele dintr-o sursă de date și folosește-l pentru umplerea obiect DataSet.
Visual Studio .NET conține doi furnizori de date .NET. Furnizorul de date SQL Server .NET asigură comunicarea cu SQL Server 7.0 și ulterior. Această metodă de acces este cea mai eficientă pentru SQL Server 7.0 și o versiune superioară deoarece furnizorul de date SQL Server .NET comunică direct cu SQL Server prin protocolul TDS (Tabelul de date tabulare). Furnizorul de date OLE DB .NET este necesar să se conecteze la alte baze de date decât SQL Server, cum ar fi Oracle sau IBM DB2. Acest furnizor de date utilizează OLE DB pentru bazele de date relevante.
Figura 8. Diferența de rute în ADO.NET.
Figura 8 prezintă diferitele moduri în care o aplicație poate comunica cu o bază de date prin ADO.NET. Când selectați o cale, mai întâi determinați ce furnizor de date .NET va fi utilizat. Dacă aceasta este SQL Server 7.0 sau o versiune ulterioară, furnizorul de date SQL Server.NET este conectat. În cazul în care baza de date este SQL Server 6.5, sau diferite de SQL Server (de exemplu, Oracle), veți avea nevoie de un furnizor de date OLE DB .NET. Rețineți că puteți utiliza furnizorul de date baza de date OLE DB .NET to SQL 7.0 și mai mare, dar apoi a pierdut câștigul în productivitate, care oferă o conexiune directă la SQL Server prin protocolul TDS. Cu toate acestea, în acest mod nespecific este un plus - .. Mobilitate, adică, puteți modifica baza de date, fără modificarea codului.
Apoi, trebuie să stabiliți ce sarcină doriți să efectuați. Dacă trebuie doar să citiți și să afișați date din sursa de date, obiectul Object Data Reader este suficient. Dar dacă trebuie să manipulați datele (de exemplu, editați sau ștergeți), trebuie să utilizați obiectul Set date. Deși acest obiect ar trebui utilizat doar dacă este necesar, deoarece funcționează mai lent decât cititorul de date (setul de date utilizează cititorul de date pentru a popula tabelele).
Exemplu pe ADO.NET
Luați în considerare modul în care ADO.NET acționează în serviciul Web. Listă 2 arată un serviciu Web care returnează un obiect Set de date. Codul din listare 2 este similar cu codul din Lista 1. Serviciul Web din listare 2 găsește tabelul Autori în baza de date Pubs și îl reprezintă ca serviciu Web. Serviciul Web utilizează furnizorul de date SQL Server .NET, după cum se arată în următorul rând:
Dim conn AS nou SqlConnection ("server = localhost;
uid = sa; parola =; baza de date = pub-uri)
Serviciul Web utilizează apoi obiectul Command pentru a interoga baza de date:
Dim comm AS SqlCommand nou (sql, conn)
Apoi, serviciul Web utilizează DataAdapter pentru a popula DataSet:
Rețineți că conexiunea este închisă de îndată ce setul de date este plin, spre deosebire de conexiunile din ADO care trebuie deschise în timp ce există o conexiune prin RecordSet. DataSet rezultat este returnat ca un serviciu Web. Figura 1 prezintă porțiunea DataSet care este obținută după ce este apelat un nou serviciu Web. DataSet cu schema sa este reprezentat în format XML. O aplicație client poate selecta o legare la acest set de date utilizând componenta DataGrid. Lista 3 arată codul care efectuează această obligație. Ecranul 2 arată setul de date rezultat, legat de controlul DataGrid într-o aplicație Web din ASP.NET, care va prezenta acest set de date într-o formă mai convenabilă. ASP.NET acceptă multe controale care sunt legate automat la DataSet.
Utilizarea ADO în aplicațiile .NET
Deși ADO.NET are multe funcții noi implementate, puteți continua să utilizați ADO. La dezvoltarea unei noi aplicații .NET, ar trebui să fie preferată ADO.NET. Dar dacă procesul de dezvoltare continuă, puteți lăsa ADO în vechile proiecte și utilizați ADO.NET în cele noi. NET Framework vă permite să utilizați ADO în aplicații .NET prin COM, care acceptă compatibilitate înapoi fără a fi nevoie să modificați ADO. Trebuie să importați bibliotecile de tip ADO ca un ansamblu (a se vedea ecranul 3). Apoi puteți utiliza ADO, așa cum se arată în codul din Lista 4.
În concluzie, vreau să adaug că tehnologiile de acces la baze de date sunt în continuă evoluție. În timp ce o tehnologie este stăpânită, apare un altul. Numai unul rămâne neschimbat: bazele de date joacă un rol din ce în ce mai important în dezvoltarea aplicațiilor. Cunoașterea celor mai recente tehnologii și a schimbărilor evolutive pe care le provoacă va ajuta la găsirea tehnologiei optime pentru sarcina curentă și va face o alegere în cunoștință de cauză în cazul modificărilor necesare.