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.
În acest material
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.
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
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.