[ darkosos @ 12.12.2004. 21:30 ] @
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?
[ ZokiR @ 13.12.2004. 01:51 ] @
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.
[ JogyII @ 13.12.2004. 09:40 ] @
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"" "
[ darkosos @ 13.12.2004. 12:56 ] @
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.
[ bunker @ 13.12.2004. 14:38 ] @
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...
[ darkosos @ 13.12.2004. 14:52 ] @
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
[ jablan @ 13.12.2004. 15:00 ] @
Citat:
Code:
For poz = 0 To len - 1

Hm nisi razmišljao o korišćenju String.Replace metode?
[ darkosos @ 13.12.2004. 15:09 ] @
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.