Baze de date SQL – manipulare din interfata utilizand cod C#

26/05/2016

Coding Diverse

In ultima vreme ne-am pus problema cum am putea crea o arhitectura care sa interactioneze cu baza de date in asa fel incat, daca facem o modificare din interfata pentru a adauga sau elimina atribute, sa aiba efect direct la nivel de tabele, view-uri, proceduri stocate sau functii in baza de date.

Ce ar insemna acest lucru? Volumul de munca la orice proiect s-ar injumatati, deoarece partea de baze de date ar fi complet eliminata si clientul ar avea un control sporit asupra aplicatiei sau site-ului.

Astazi ne-am propus sa cream o tabela si un view utilizand numai cod .NET (C#).

O sa incepem, bineinteles, prin a crea un nou proiect: Visual Studio 2015 -> NEW -> Project -> Class Library. Adaugam cateva clase: SQLServerInterface.cs, CrmEntity.cs (obiectul nostru) si DataBaseConnection.cs.

Pentru DataBaseConnection.cs rolul este cat se poate de clar: conexiunea cu baza de date. Iata si codul:

Nu este nevoie sa incercati sa-l reproduceti, deoarece, dupa cum v-am obisnuit deja, gasiti aici solutia cu tot codul.

Sa explicam totusi un pic aceasta clasa, in deosebi cele 2 metode Connection si IsServerConnected:
1.    Connection returneaza o conexiune de tipul SqlConnection, conexiune pe care o definim in fisierul de configurari (ConnectionString) web.config, pentru proiectele web, sau app.config pentru proiectele Windows forms;
2.    IsServerConnected face un test simplu pentru a vedea daca baza de date este active sau nu; in cazul in care nu este activa, va returna o conexiune secundara (AlternateConnectionString).

Obiectul nostru, CrmEntity, il vedeti definit mai jos:

Intram in clasa principala a proiectului nostru, si anume SQLServerInterface. Incepem cu prima metoda: EntityCreate. Va primi ca si parametru un obiect de tipul CrmEntity.

Inainte de a crea o tabela, trebuie initial sa verificam daca exista sau nu o tabela cu numele respective. Pentru acest lucru am creat metoda CheckTable care returneaza un Boolean si primeste ca parametru un string: numele tabelei.

Urmeaza sa preluam server-ul si numele bazei de date prin extragerea lor din obiectul nostru de tip SqlConnection:
-    Server srv = new Server(conn.DataSource);
-    DataBase db = srv.Databases[conn.Database];

Definim o tabela si coloanele ei, in functie de cum dorim. Putem stabili unele coloane fixe, cum ar fi coloana de identificare, colana cu numele, dar si alte coloane care sunt pasate in lista de SqlParameter. Numai ca pentru a transmite baze de date tipul de data, avem nevoie sa facem o corelare intre tipurile SqlSbType (continut in System.Data.SqlClien) si DataType (nativ pentru Microsoft.SqlServer.Management.Smo).

Codul complet il veti gasi in solutia atasata.

Codul de creare a unui VIEW este un pic diferit fata de o tabela: se defineste un nou view (View vw = new View(db, “View” + entity.EntityName);) si apoi se definim Header-ul si Body-ul view-ului:
- vw.TextHeader = “CREATE VIEW ” + “View” + entity. EntityName + “ AS”;
- vw.TextBody = “SELECT * FROM “ + entity. EntityName;

Astfel am creat un view bazat pe tabela pe care doar ce am creat-o.

Back to List