C#: atestat și pregătire ONTI

C#: interogări SQL cu filtrare și ordine stabilă

Construiește interogări SQL pentru listele unei aplicații C#. Separă filtrarea de sortare și verifică ordinea explicită, inclusiv când valorile sunt egale.

O listă de rezultate nu are o ordine garantată doar pentru că pare mereu sortată la prima rulare. Cerem explicit ordinea prin ORDER BY. Pentru catalog, selectăm cărțile din categoria Programare și le afișăm după titlu, apoi după ID. A doua cheie face ordinea deterministă când două titluri sunt identice.

Cum lucrezi cu exemplul

Schema și interogarea sunt disponibile în arhiva lecției. Verificarea semantică folosește SQLite în memorie; integrarea Access/OleDb se face separat pe Windows, după pregătirea formatului și providerului potrivit.

Descarcă sursele și instrucțiunile.

Ideea și pașii de implementare

SELECT alege coloanele necesare, FROM stabilește sursa, WHERE filtrează rândurile, iar ORDER BY controlează prezentarea. Condițiile din WHERE nu schimbă valorile salvate. Evităm SELECT * când interfața se bazează pe o structură precisă de rezultat.

În această lecție valorile sunt literali fixați în exemplu, ca să putem calcula rezultatul pe hârtie. Când filtrul vine din TextBox, lecția OleDb va folosi parametri. Nu transforma exemplul într-o concatenare de text SQL cu intrarea utilizatorului. În dialecte diferite, regulile de collation pot schimba ordinea literelor; pentru setul simplu de aici folosim titluri fără ambiguități.

Exemplu și rezultat așteptat

În datele de test, Algoritmi și Grafuri sunt Programare, iar Povesti este Literatura. Filtrul Programare produce două rânduri, în ordinea Algoritmi, Grafuri. Dacă adăugăm și condiția BookId>=2, rămâne numai Grafuri. Un rezultat gol este diferit de o eroare de conexiune.

Schemă pentru lecția 33: Books: 3 rânduri; WHERE Category=Programare; ORDER BY Title, BookId; Algoritmi; Grafuri.Books: 3 rânduri → WHERE Category=Programare → ORDER BY Title, BookId → Algoritmi; Grafuri.Mărește schema ↗

Interogarea verificată

SELECT BookId, Title FROM Books WHERE Category = 'Programare' ORDER BY Title, BookId;

Rezultatul, în ordinea rândurilor:

1 | Algoritmi
2 | Grafuri

Greșeli și limite

Nu aplica sortarea doar asupra textului afișat și apoi folosi poziția ca ID. Nu compara NULL prin egalitate obișnuită; pentru valori absente folosește IS NULL. Nu confunda filtrarea SQL, făcută în baza de date, cu filtrarea unei colecții deja încărcate în memorie.

Exersează

Adaugă o a doua carte intitulată Algoritmi, cu ID 4. Rezultatul trebuie ordonat după titlu și apoi ID: 1, 4, 2. Schimbă categoria cerută într-una inexistentă și verifică lista goală. Explică de ce lipsa ORDER BY ar face acest test de ordine nejustificat.

Continuă parcursul

Parcursul complet de 50 de lecții

Bazele C#

Lecția precedentă: C#: proiectează schema SQL înaintea formularelor

Lecția următoare: C#: JOIN și rapoarte care păstrează valorile zero.

Referință: documentația Microsoft.

Întrebări frecvente

WHERE modifică datele?

Nu în SELECT. Restrânge rândurile din rezultat.

De ce am două chei de sortare?

A doua stabilește o ordine previzibilă pentru egalități pe prima.

Pot concatena textul utilizatorului în SQL?

Nu. Pentru intrări variabile folosește parametri ai providerului.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →