In acest articol vom trata un subiect care nu tine neaparat de C#, dar ne va fi foarte folositor pentru a crea programe C# sau a rezolva subiecte de la olimpiada de C# care au in componenta lor o baza de date. Vom vorbi despre functiile uzuale pentru baza de date in C#. Cele mai importante sunt functia SELECT, INSERT, DELETE si UPDATE. Vom discuta pe rand despre fiecare, cum se foloseste, sintaxa teoretica si aplicabilitatea propriu-zisa a functiei.
Structura la o baza de date
Pentru a incepe cu functiile trebuie sa lamurim structura bazei de date. Baza de date este formata din linii si coloane. Pentru a putea insera in baza de date va trebui sa tinem cont de aceste linii si coloane. O sa pun mai jos o imagine care arata exact are sunt linii care coloane si valorile uzuale folosite in programe pentru acestea. Culoarea rosie reprezinta linie, iar cea albastra coloana
Functia SELECT
Cu acesta functie putem selecta orice informatie din baza de date. Sintaxa pentru a o folosi este:
SELECT * FROM table SELECT * FROM table WHERE variabila = @variabila
Prima sintaxa ne permite selectarea totala a datelor din baza de date, mai precis, nu are niciun fel de filtrare, comparativ cu cea de-a doua sintaxa care este filtrata prin WHERE, adica functia va cauta in baza de date doar daca exista un camp care sa indeplineasca conditiile impuse de noi. De exemplu, daca avem anumite id-uri unice pentru fiecare utilizator si dorim sa preluam numele utilizatorului cu ID-ul impus de noi vom folosi:
SELECT * FROM table WHERE IdUtilizator = 2
Ne va cauta IdUtilizator cu valoare 2 si ne va permite sa preluam orice de pe acea linie.
Aplicabilitatea propriu-zisa a functiei SELECT:
In programele pe care le vom crea nu vom putea folosi doar functia si programul sa ne selecteze pur si simplu ce avem nevoie. In primul rand, trebuie sa avem o conexiune la baza de date, pentru a sti din ce baza de date sa luam informatia. In al doilea rand, functia select vine la pachet cu inca cateva functii, nu foarte grele, dar foarte importante, functiile pe care le vom folosi noi sunt SqlDataReader si SqlCommand, acestea permit apelarea Selectiei (SqlCommand) si citesc in baza de date (SqlDataReader). SqlDataReader poate fi folosit cu if sau cu while. Vom folosi if, in cazul in care vom extrage doar un set de date, iar while cand vom avea nevoie de mult mai multe date.
SqlCommand numeComanda = new SqlCommand("functia bazei de date", conexiunea); //creem o comanda SqlDataReader numeReader = numeComanda.ExecuteReader(); //creem Reader SqlCommand cmd = new SqlCommand("SELECT * FROM Utilizatori", con); SqlDataReader red = cmd.ExecuteReader(); if(red.Read()) { //vom prelua, de genul prima coloana red[0], a doua red[1], etc .. }
Functia INSERT
Cu aceasta functie vom putea insera in baza de date. Sintaxa este intuitiva, deci nu e foarte greu de retinut, trebuie doar putina atentie.
INSERT INTO tabel(coloana1, coloana2, ... , coloanaN) VALUES(@valoare1, @valoare2, ... , @valoareN)
Coloane pot fi alese, nu este neaparat sa inseram in coloana1, iar apoi sa inseram in coloana2. Daca avem nevoie sa inseram in coloana1 si coloana 3, vom insera doar in acelea, iar functia va arata ceva de genul:
INSERT INTO table(coloana1, coloana3) VALUES(@valoare1, valoare3)
Atentie! Niciodata sa nu scrieti coloana1, coloana2 si sa dati voaloare pentru coloana1 si coloana3. Programul va insera in coloana2, valoarea pe care voi defapt o voiati in coloana3, din cauza ca ati scris coloana2 si nu coloana3. Daca vreti sa inserati mai multe valori decat coloane, functia nu va merge si programul va da crash.
Aplicabilitatea propriu-zisa a functiei INSERT:
Functia aceasta va avea in comun cu functia SELECT, doar functia de creare a comenzii (SqlCommand), in schimbul functiei SqlDataReader, aparand un ExecuteNonQuery().
Observatie! La orice alta functie in afara de functia SELECT, vom folosi ExecuteNonQuery(), fara aceasta functia nu va fi executata. Explicatie: Functia SELECT este un Query , iar celelalte nu sunt query-uri!
La variabilele @valoare1, @valoare2, ne vom folosi de o functie care da valoare acestora. Exista doua posibilitati, dar noi o vom folosi pe cea mai generala.
SqlCommand cmd = new SqlCommand("INSERT INTO Utilizatori(NumeUtilizator, ParolaUtilizator) VALUES(@nume, @parola)", con) cmd.Parameters.AddWithValue("nume", textBox1.Text); cmd.Parameters.AddWithValue("parola", textBox2.Text); cmd.ExecuteNonQuery(); //cmd.Parameters.AddWithValue("@valoare1", valoarePropriuZisa) atribuie valoarea pentru variabila aleasa. //cmd.ExecuteNonQuery executa comanda
Functia DELETE
Aceasta functie sterge anumite date din baza de date. In principiu, sintaxa este cam aceeasi cu cea de la Select.
DELETE FROM table
De asemenea, se poate filtra si functia de delete, folosind WHERE. Diferenta dintre Select si Delete, pe langa faptul ca Select face o selectie si Delete sterge din baza de date, functia Delete nu este query, deci vom folosi ExecuteNonQuery().
DELETE FROM table WHERE Filtru = @filtru
Aplicabilitatea propriu-zisa a functiei DELETE:
Functia de DELETE, la aplicabilitate este la fel ca la insert, se creeaza comanda, iar comanda se executa prin ExecuteNonQuery():
SqlCommand cmd = new SqlCommand("DELETE FROM Utilizatori WHERE IdUtilizator = @id", con) cmd.Parameters.AddWithValue("id", "3"); cmd.ExecuteNonQuery(); //cmd.Parameters.AddWithValue("@valoare1", valoarePropriuZisa) atribuie valoarea pentru variabila aleasa. //cmd.ExecuteNonQuery executa comanda
Functia UPDATE
Aceasta functie permite actualizarea datelor din forma, in baza de date. Sintaxa este putin diferita de celelalte 3 functii dar tot intuitiva si usor de retinut.
UPDATE table SET Variabila = @valoare, Variabila2 = @valoare2, ... //atribuorea valorii variabilei se realizeaza ca la INSERT
Si aceasta functie la randul ei poate fi filtrata prin aceeasi metoda, folosind WHERE
UPDATE table SET Variabila = @valoare, Variabila2 = @valoare2, ... WHERE Filtru = @filtru
Atentie! Intre UPDATE si SET este neaparata nevoie de tabelul unde doriti sa efectuati modificarea. Variabilele ce vor fi actualizate vor trebui separate prin virgula.
Aplicabilitatea propriu-zisa a functiei UPDATE:
Diferenta dintre UPDATE si INSERT o face doar sintaxa si functionalitatea, aplicabilitatea, insa, este chiar identica. Pentru a executa comanda vom folosi ExecuteNonQuery().
SqlCommand cmd = new SqlCommand("UPDATE Utilizatori SET NumeUtilizator = @nume, ParolaUtilizator = @parola WHERE IdUtilizator = @id", con) cmd.Parameters.AddWithValue("nume", textBox1.Text); cmd.Parameters.AddWithValue("parola", textBox2.Text); cmd.Parameters.AddWithValue("id", "10"); cmd.ExecuteNonQuery(); //cmd.Parameters.AddWithValue("@valoare1", valoarePropriuZisa) atribuie valoarea pentru variabila aleasa. //cmd.ExecuteNonQuery executa comanda
In cazul in care am omis ceva, puteti gasi video-ul pe YouTube.