Citat:
VerbatimBOT:
Citat:
logic_rabbit: Mozda je bolje da dinamicki pravis sql upit kao npr.
if !(Textbox1.text=="")
{
SqlUpit+="AND Vrsta="+@Vrsta
}
Znaci da dinamicki dodajes novi "AND" ako je textbox za unos pun.
Ovo će sigurno raditi.
Radice, ali uopste nije preporucljivo posto je podlozno SQL injection napadima. Dovoljno je da ukucam
'; delete from Proizvodi; u bilo koji text box i da ti obrisem tabelu sa proizvodima. SQLParameters ima mehanizam zastite od ovog napada.
Citat:
Fedya: Ovo sam pisao kada bi se to radilo u aplikaciji, a tamo ne mozes imati NULL za string.
Ako to isto radis na storovanoj (sto je daleko cesce), onda poredis sa NULL, znaci:
(@par1 = NULL or kolona1 = @par1)
Kao prvo, = operator ne radi sa NULLovima, x = NULL uvek vraca false; Ispravni operator je IS, tj
@par1 is NULL
Drugo, ovo je jedini ispravni nacin za resenje ovog problema, stored procedura sa
(@par1 is NULL or kolona1 = @par1) AND ... filterom, posto ce resenje sa (="") raditi samo ako su svi paramteri pretrage stringovi. Na aplikaciji je da osigura da se za prazne parametre upuca DBNull.Value u parametar. najjednostavniji nacin u C#-u je preko ?: tj.
Code:
textBox1.Text=="" ? DBNull.Value : <odredisniTip>.Parse(textBox1.Text)
Iako izgleda malo rogobatno ovo resenje je ujedno i najbrze posto ce SQL Query optimizer izbaciti skeniranje indeksa/tabele za one parametre koji su NULL preko boolean optimizacije OR operatora (kao sto je Fedya inicijalno napomenuo). Takodje se NULL moze postaviti kao default vrednost za sve parametre stored procedure, pa onda ne moras cak ni da ih prosledjujes ako su text boxovi prazni.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić