Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

VB .NET i Transact SQL - citiranje stringa

[es] :: .NET :: VB .NET i Transact SQL - citiranje stringa

[ Pregleda: 3121 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu.



+64 Profil

icon VB .NET i Transact SQL - citiranje stringa12.12.2004. u 21:30 - pre 235 meseci
Recimo da želim SQL bazi da pošaljem upit tipa:
Code:

select * from ...
where naziv ='neki_string'


Dok neki_string ne sadrži kontrolne karaktere niti npr. sam znak citiranja (') sve je u redu. Provalio sam da može da se stavi npr. char(39) umesto apostrofa, pa bi recimo string 123'abc poslali kao '123' + char(39) + 'abc'.
Da li ima nešto bolje, ili najbolje, funkcija u VB koja vrši citiranje stringa, onako kako SQL Server to traži?
 
Odgovor na temu

ZokiR
Zoran Radojković
Melburn, Australija

Član broj: 15986
Poruke: 109
*.gpm.net.au.



Profil

icon Re: VB .NET i Transact SQL - citiranje stringa13.12.2004. u 01:51 - pre 235 meseci
Koristi SqlCommand.Parameters property umesto spajanja stringova.

Code:

command.CommandText = "SELECT * FROM naziv = @naziv";
command.Parameters.Add("@naziv", SqlDbType.VarChar);
...
command.Parameters["@naziv"].Value = naziv;


Pored toga što se ovim rešava prisustvo apostrofa u imenima i sl., takođe je korisno iz bezbednosnih razloga. Potraži "SQL injection" na Google-u.
 
Odgovor na temu

JogyII

Član broj: 29257
Poruke: 623
*.korisnici.absolutok.com.



Profil

icon Re: VB .NET i Transact SQL - citiranje stringa13.12.2004. u 09:40 - pre 235 meseci
ZokiR je u pravu, ali to neznaci da nekada nece biti potrebno "citiranuje stringa" (ubacivanje znaka navoda u string)

ideja je sledeca : u VB.NET se string oznacava sa "string" <<dvostruki navodnici
u T-SQL se string oznacava sa 'string' <<jednostruki navodnici

pa bi tvoj primer ispao :
tSql = "SELECT * FROM Tabela WHERE Tabela.Polje = 'test' "
znaci nema problema, a ako zelis bas dvostruki navodnik da ubacis u string (naravno pod uslovom da je baza podesena da ovo podrzi) onda umesto svakog dvostrukog navodnika unutra stavljas dva dvostruka navodnika :

tSql = "SELECT * FROM Tabela WHERE Tabela.Polje = ""test"" "


So Long, and Thanks for All the Fish


 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu.



+64 Profil

icon Re: VB .NET i Transact SQL - citiranje stringa13.12.2004. u 12:56 - pre 235 meseci
Otprilike sam skapirao ovo sa command. Da li može isto to da se upotrebi u situaciji kad imam DataView i treba da setujem RowFilter?

Ideja je da forma za prikaz reda u tabeli istovremeno služi i za filtriranje. Dakle, korisnik fiksira neko polje i želi da vidi samo redove iz tabele koje imaju istu vrednost tog polja. Koristio sam DataView zbog filtriranja, a navigaciju radim pomoću CurrencyManager-a, koji sam inicijalizovao sa istim tim DataView-om.
 
Odgovor na temu

bunker
Srđan Savković
Smederevo

Član broj: 4495
Poruke: 239
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: VB .NET i Transact SQL - citiranje stringa13.12.2004. u 14:38 - pre 235 meseci
escape character za '(apostrof) u DataRow, DataTable... je apostrof takodje. Znaci ako imas neki cell u kome je vrednost 'ledno, trebalo bi da napises DataTable.Select("opis = ''ladno").
Ovo je sigurno tacno. Postoji jos znakova kojima je potreban escape character, npr '%', ali ne znam koji je escape. To imam u nekom kodu kod kucce, jer mi je trebalo da isfiltiram sve karaktere koji bi mogli izazvati gresku. Ako ti treba mogu ti poslati sve escape sekvence za 2-3 dana. Sutra ne radim...
Nije važno stići prvi. Važno je prvo da stigneš.
 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu.



+64 Profil

icon Re: VB .NET i Transact SQL - citiranje stringa13.12.2004. u 14:52 - pre 235 meseci
Hvala, to bi mi baš značilo. A uspeo sam da sam provalim ovo za apostrof, konačno. Funkcija izgleda ovako. Testirao sam je, ali nisam 100% siguran da radi 100% kako valja. Za sada nemam prijavljenih bug-ova :)
Code:
Public Function Citiraj(ByVal text As String) As String
            Dim citat As String
            Dim poz As Integer = 0
            Dim len As Integer
            citat = text.Trim()
            len = citat.Length
            For poz = 0 To len - 1
                If citat.Chars(poz) = "'" Then
                    citat = citat.Insert(poz, "'")
                    poz += 1
                    len += 1
                End If
            Next
            citat = "'" & citat & "'"
            Return citat
        End Function
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: VB .NET i Transact SQL - citiranje stringa13.12.2004. u 15:00 - pre 235 meseci
Citat:
Code:
For poz = 0 To len - 1

Hm nisi razmišljao o korišćenju String.Replace metode?
 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu.



+64 Profil

icon Re: VB .NET i Transact SQL - citiranje stringa13.12.2004. u 15:09 - pre 235 meseci
E, sjajno! Dakle nešto u fazonu citat.Replace("'", "''")?
Ako je to to, onda super! Nisam razmišljao jerbo nisam ni znao da ima tako nešto. Tek sam skoro krenuo da radim u VB...

Radi! Evo sad koda:
Code:

Public Function Citiraj(ByVal text As String) As String
    Dim citat As String
    citat = text.Trim()
    citat = "'" & citat.Replace("'", "''") & "'"
    Return citat
    End Function

Hvala.
 
Odgovor na temu

[es] :: .NET :: VB .NET i Transact SQL - citiranje stringa

[ Pregleda: 3121 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.