11. maj 2010 - 10:12Der er
9 kommentarer og 1 løsning
SQL-søgning via flere felter
Hej,
Hvis jeg har en slags udvidet søgning bygget op som en form med flere Controls - Textboxe og DropDowns osv. - som man kan udfylde efter behov, hvordan er det så mest hensigtsmæssigt at behandle søgningen når man trykker på "søg"?
Skal jeg skrive en masse If-sætninger og spørge på hvilke felter der er udfyldt, og så skrive en masse forskellige SQL-sætninger ud fra udfaldet, eller kan man lave noget smartere med en parametiriseret søgning og én SQL-sætning?
Ja du bliver nødt til at skrive den med if. Sådan en if-then kan jo implementeres på mange måder, men i bund og grund handler det om at få sammensat din sql-query korrekt (parameteriseret eller ej, samme fremgangsmåde). Om du så gør det med Linq eller ej, ændrer heller ingenting :)
og pssst... fald ikke i begynderfælden og tro at stored procedures gør dig lykkeligere *GG*
Det som du ihvertfald bør fokusere lidt på er at holde en grundliggende lagdeling. Eks.vis dine .aspx + code behind og så et ekstra lag (servicelaget og gerne i samme project), men adskilt på et logisk niveau, forstået på den måde at via din codebehind kalder du til andre mere specielle klasser.
Okay - men det vil sige at bare jeg har 6 søgefelter hvor der frit kan søges i hvert enkelt eller lade det være, så skal jeg faktisk have 36 forskellige SQL-sætninger der tager højde for alle kombinationer søgefelter - udfyldt eller ikke udfyldt?
Meget simpelt, uden nogen fancy IFilter osv... se her:
I dit servicelag; class MyAmazingService { ... void GetFromDb(string a, string b).. osv. { string sql = null; if(a != null) sql += "and field = " + a
if(b != null) sql += "and field1 = + b } }
Til sidst har du en række med and's eller måske or's, helt op til hvordan du bygger sql strengen op. Om du så bygger den med parameters eller.. tjaa... din beslutning.
Og til sidst er det blot at eksekvere imod db'en.
Nu skal ovenstående ikke være et udtryk for at jeg gør sådan, men blot tages som et forslag som der kan bygges videre på. Personligt bruger jeg Linq og hvis jeg ikke kan komme til det, så ville jeg arbejde med interfaces og et DAL og skrive Sql'en der :) Altså undgå stored procedures, de er og bliver noget hø udenfor db-serveren til selects.
Hej - tak for inspirationen. Jeg kan se at det vil være mere overskueligt med en langsom opbygning af SQL-strengen, som man så fyrer mod databasen til sidst..!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.