![]() XHost |
Oferim servicii de instalare, configurare si monitorizare servere linux (router, firewall, dns, web, email, baze de date, aplicatii, server de backup, domain controller, share de retea) de la 50 eur / instalare. Pentru detalii accesati site-ul BluePink. |
Pentru aplicatia noastra vom folosi o baza de date numita elearning care contine 2 tabele : Documents si Users. Vezi descrierea campurilor din fiecare tabela la Lectia 1. Desi nu sunteti limitati sa folositi un server de baze de date sau altul, eu va sugerez sa folositi o baza de date Access deoarece este cel mai usor de administrat (configurat, creat, modificat, adaugat inregistrari etc.). De altfel starter kit-ul de la sfarsitul lectiei contine deja o baza de date Access cu cele 2 tabele.
ADO.NET este componenta din .NET Framework care se ocupa cu accesul la baze de date. Datorita multitudinii de tipuri de baze de date de pe piata, s-a dorita uniformizarea accesului, astfel incat inlocuirea unei baze de date cu alta (de la un alt producator) sa necesite cat mai putine modifcari de cod. In mod implicit, .NET Framework se poate "lega" la o multitudine de baze de date: SQL Server, Microsoft Access, Oracle si orice alta baza de date pentru care exista instalat in sistem un driver OLEDB sau ODBC. Bazele de date SQL Server si Oracle sunt un pic speciale fata de celelalte, in sensul ca exista pentru ele clase specifice de acces (mult mai performante decat cele implicite, fiind optimizate pentru lucrul cu SqlServer, respectiv Oracle). Astfel, pentru a folosi baze de date pentru care avem driver OLEDB folosim clasele din namespace-ul System.Data.OleDb, in timp ce pentru Sql Server avem namespace-ul System.Data.SqlClient, iar pentru Oracle System.Data.Oracle. Desi namespace-urile si numele de clase sunt diferite, in general, modul de utilizare al lor este acelasi, deci daca ati invat sa lucrati cu un tip de baza de date, va va fi foarte usor sa treceti pe un alt tip.
Primul lucru care trebuie realizat in lucrul cu baze de date este conectarea la o baza de date. Asta se poate realiza in doua moduri.
1. folosind Visual Studio. Acesta pune la dispozitie View -> Server Explorer, unde puteti realiza Connect to Database. Apoi trebuie sa alegeti un Provider (de exemplu OLE DB Provider For SQL Server); Connection, unde trebuie sa specificati server name (o instanta de MS SQL aflata pe computerul personal sau in reteaua din care acesta face parte), trebuie sa selectati o baza de date de pe acest server si modul de autentificare, care poate sa fie integrata cu Windows (se poate folosi un cont din masina personala sau din Active Directory daca e vorba de retea) sau poate sa fie specifica SQL Server, caz in care trebuie sa specificati un cont aflat in MS SQL cu o parola valida.
In general pentru aplicatiile critice se recomanda folosirea unui cont specific creat in MS SQL Server. Pentru asta, deschideti SQL Server -> Enterprise Manager, mergeti la Security\Logins si acolo creati un nou user. Puteti de aici sa ii specificati accesul la baze de date (Database Access) – sa spunem ca ii dati drepturi pe baza de date numita elearning. Apoi mergeti la baza de date elearning, la Users si ar trebui sa vedeti acolo userul creat inainte la nivel de SQL Server. Apasati click dreapta, Properties bifati db_datareader si db_datawriter, apoi selectati Permissions, unde puteti sa acordati permisiuni pe fiecare tabela. Iata un articol interesant care atinge problema accesului la date MS SQL : http://samples.gotdotnet.com/quickstart/aspplus/doc/webdataaccess.aspx.
Pentru a va conecta la o baza de date Access, va trebui sa alegeti Provider JET 4.0 OLE DB si apoi sa specificati calea catre un fisier de baze de date .mdb (pe care l-ati creat anterior in MS Access). De asemenea, va trebui sa specificati un user si o parola de acces la baza de date (implicit user=admin si parola este vida). Iata un link interesant pentru accesul la o baza de date Access dintr-o aplicatie ASP.NET: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/adon_wtaccessdb.asp.
Dupa ce ati urmat pasii de mai sus, veti observa ca a aparut o noua intrare in Data Connections (din fereastra Server Explorer). Aceasta intrare (conexiune) o puteti "trage" pe un formular web si mediul integrat va crea automat un obiect SqlConnection (sau OleDbConnection, in functie de tipul conexiunii), gata configurat pentru a se conecta la baza de date respectiva.
2. direct in cod. In acest caz vom specifica noi explicit parametrii de conectare, care includ: tipul bazei de date (Provider), directorul si numele bazei de date (Data Source), credentialele de conectare (User Id si Password). Iata un exemplu:
/* realizarea unei conexiuni la o baza de date MS Access elearning.mdb, aflata in directorul c:\db\ */ string strParameters = @Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db\elearning.mdb;User Id=admin;Password=; /* in cazul unei conexiuni la o baza de date Sql Server, sirul de conectare ar arata cam asa: */ string strParameters = @Data Source=Florin;Initial Catalog=elearning;User Id=sa;Password=parolasa;; /* evident ca in toate cazurile de mai sus, userul folosit trebuie sa aiba drepturi pe baza de date in MS SQL. *// // in fine, sa creem conexiunea: OleDbConnection oleConn = new OleDbConnection(strParameters) // respectiv pentru Sql Server SqlConnection sqlConn = new SqlConnection(strParameters);
Citirea Datelor (SELECT …)
Dupa realizarea conexiunii, putem sa accesam in sfarsit datele. In ADO.NET exista doua abordari pentru citirea datelor din baza de date.
// am deja creata o conexiune la baza de date. OleDbCommand comGet = new OleDbCommand("SELECT * FROM Questions WHERE CourseID='" + CourseID + "'", oleDbConn); oleDbConn.Open(); try { OleDbDataReader dr = comGet.ExecuteReader(); /* acum voi parcurge DataReader-ul inregistrare cu inregistrare */ while(dr.Read()) // returneaza false daca nu mai sunt inregistrari de citit { Response.Write(dr[0].ToString()); // afiseaza informatia din coloana 0 sub forma unui string int varsta = (int)dr["Varsta"]; // returneaza informatia din coloana "Varsta" sub forma unui intreg } } finally { oleDbConn.Close(); }
/* citesc datele si le depun intr-un DataSet. */ DataSet dsCourses; OleDbDataAdapter daGet = new OleDbDataAdapter("SELECT * FROM Courses",sqlConn); daGet.Fill(dsCourses); /* acum voi atasa DataSet-ul de un DataGrid pentru a-l vizualiza. */ myDataGrid.DataSource = dsCourses; myDataGrid.DataBind(); // se vor afisa informatiile din dataset in datagrid
Update si Insert
Pentru a scrie sau a modifica date in bazele de date, avem nevoie de obiectele SqlCommand (MS SQL) sau OleDbCommand (Access). Atat pentru INSERT cat si pentru UPDATE, avem nevoie de o comanda asociata unei conexiuni la baza de date. Trebuie sa deschidem conexiunea, apoi sa executam comanda si apoi sa inchidem conexiunea.
/* suntem intr-o metoda care returneaza string *// // imi definesc comanda SQL OleDbCommand com = new OleDbCommand("INSERT INTO Marks (SignInID, LessonID, PostedHomework) Values('" + SignInID + "','" + ID + "','1')", oleDbConn); try { // deschid conexiunea la baza de date. oleDbConn.Open(); com.ExecuteNonQuery(); } catch(OleDbException) { // in caz de eroare, semnalez utilizatorului return "Could not mark the homework!!!"; } finally { /* inchid conexiunea la baza de date. Ramura finally se executa indiferent daca a fost o eroare sau nu (s-a intrat pe catch sau nu) */ oleDbConn.Close(); } return "Homework marked.";
Am pus un starter pentru tema 3 la adresa http://maryuss-thebest.uv.ro/cursuri/starter.zip. In directorul database gasiti o baza de date MS Access cu 2 tabele. In directorul Code, apar 2 clase:
ATENTIE: pentru instalarea starter kit-ului, alegeti un director pe hard (de ex. c:\inetpub\wwwroot) in care dezarhivati starter.zip. Dupa care, trebuie sa creati un director virtual in IIS, care sa pointeze catre directorul unde se afla Starter Kit-ul. Dati click dreapta pe My Computer -> Manage -> Services and Applications -> Internet Information Services -> Web Sites -> click dreapta pe Default Web Site -> New -> Virtual Directory -> introduceti "Starter" -> in caseta Directory introduceti directorul unde se afla starter-ul (in cazul nostru c:\inetpub\wwwroot\starter\) -> Finish. Gata! Acum puteti incarca in Visual Studio .NET 2003 proiectul Starter.csproj.
Implementati toate metodele din DataAccess.cs si UserActions.cs + folositi aceste clase in formularele web (user.aspx, admin.aspx, login.aspx) pentru a completa aplicatia.