Uvozovky v selectu   zodpovězená otázka

SQL, Databáze, Bezpečnost

Dobrý den, mám aplikaci psanou ve VB která komunikuje s SQL serverem. Mimo jiné tam tam je i tlačítko pomocí kterého uživatel vyvolá inputbox. Aplikace volá procedury uložené na sql serveru a to co uživatel zadá do inputboxu se odešle na server jako parametr a doplní se do podmínky WHERE u selectu. Vše funguje bez problémů až do chvíle, kdy uživatel do inputboxu zadá jednoduchou uvozovku, pak mi to hází chybu procedury. Nevíte jak zajistit aby se i k této uvozovce přistupovalo jako k textu a ne jako k SQL znaku? Měl jsem zato že když použiju parametry nemělo by se to stávat ale bohužel opak je pravdou.

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Když použijete parametry, tohle se stát nemůže. Evidentně je používáte špatně, nebo je tam jiná chyba. Pošlete sem kousek kódu, ať vidíme, kde může být chyba.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

kód je zde:

    Sub nacistSeznamUzivatelu()

	dim jmeno as string


        dbSeznamUzivatelu.Clear()


        jmeno = InputBox("zadejte jméno")
        If jmeno = Nothing Then Exit Sub


       
        spojeni.Open()
       


        dotaz = ("vratky_nacist_seznam_uzivatelu @jmeno=" & jmeno)



        dbAdapter = New SqlClient.SqlDataAdapter(dotaz, connectionString)
        dbAdapter.Fill(dbSeznamUzivatelu)
        frmUzivatele.DataGridViewSeznamUzivatelu.DataSource = dbSeznamUzivatelu




        spojeni.Close()



    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No právě, parametry nepoužíváte. To @jmeno sice je parametr, ale za něj přidáváte hodnotu, co uživatel napsal, a v ní klidně úvozovky být mohou.

Celý ten kód je takový hodně divný, například kontrola, jestli uživatel zadá jméno, je zvláštní a myslím, že nebude fungovat. Zkuste raději použít If String.IsNullOrEmpty(jmeno) Then ....

Dotaz by měl vypadat nějak takto:

dotaz = ("vratky_nacist_seznam_uzivatelu @[email protected])

A pak musíte zvlášť hodnotu parametru předat do kolekce Parameters:

dbAdapter.SelectCommand.Parameters.AddWithValue("parametr", jmeno)

Tím řeknete, že místo @parametr má dosadit hodnotu proměnné jmeno. A toto dosazení se provede až na serveru a ten už ví, co je SQL kód a co je prachobyčejná hodnota, takže tam už apostrof vadit nebude.

Pokud jenom slučujete kusy SQL kódu, je to nebezpečné právě kvůli speciálním znakům. Použitím parametrů je to v pohodě.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback