05. april 2007 - 14:57Der er
12 kommentarer og 2 løsninger
Søgning med variable antal søgeord og kriterier.
Hej, jeg har en søgning, hvor brugeren først skal vælge mellem "fugl", "fisk" eller "ved ikke" (radiobuttonlist) og så fylde søgeord i 4 tekstbokse. Det er ikke nødvendigt at fylde ord i alle tekstbokse, hvilket er det, der har voldt problemer, da jeg ikke ved om data fra en given tekstboks skal tages med i sql-sætningen. Man kunne vel bruge CASE til at se hvilke tekstbokse, der var fyldt, men så vidt jeg kan se, ville det give en del sql-sætninger. Hvad er den bedste løsning?
lav det direkte i din sql i stedet for. Du skal bare bruge parametre. f.eks.
SELECT * FROM Bruger B WHERE (ISNULL(@BrugerNavn,'')='' OR B.BrugerNavn LIKE '%'+@BrugerNavn'%' ) AND (ISNULL(@Fornavn,'')='' OR B.Fornavn LIKE '%'+@Fornavn'%' )
Tak. Jeg bruger mssql. Jeg har ikke arbejdet på sql parametre før (er på to-learn listen) og er ikke så hård i sql, så jeg har lidt problemer med at omsætte dit foreslag.
Eksempel på originale sql: "WHERE tab1.BrugerNavn LIKE '%" + brugerNavn + "%'";
Med: "WHERE (ISNULL(" + brugerNavn + ",'')='' OR tab1.BrugerNavn LIKE '%" + brugerNavn + "%')"; får jeg dette (bruger en webservice): System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Incorrect syntax near ','. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
I dit tilfælde kunne du måske opbygge din sql sætning med en løkke der kontrollerer om feltet er udfyldt og så appender til sætningen og sætter det pågældende parameter.
Jeg ville normalt vise min løsning, hmortensen - det er jo det der hjælper til at gøre eksperten endnu federe - men 'løsningen' blev at gøre noget helt andet. Jeg skal nok få det løst senere, men lige nu er der ikke tid :)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.