Avatar billede Slettet bruger
16. februar 2013 - 13:09 Der er 6 kommentarer

Problem med ' apostrof i søgeside MSSQL

Hej eksperter!
Jeg har et problem i en søgeside, der henter landenavne fra en MS SQL 2008 SP2 database.
Siden er programmeret i ASP.
Lande, hvor der er apostrof, som f.eks. COTE D'IVOIRE giver denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'IVOIRE'.

/partner/partner.asp, line 434

Koden ser sådan ud:

<%
Set objlandConn = Server.CreateObject("ADODB.Connection")
objlandConn.Open "Driver={SQL Server};" & _
"Server=xxxxxxxxxxxx;" & _
"Database=xxxxxxxxxx;" & _
"Uid=xxxxxxxxxx;" & _
"Pwd=xxxxxxxxx;"

' Forespørgsel
SQL = "SELECT distinct bopael FROM Kunder order by bopael"

Set RSland = objlandConn.Execute(SQL)

' Lister forespørgslen
Do While Not RSland.EOF
%>
      <option value="<%=RSland("bopael")%>"<%if omraade1=RSland("bopael") then%> selected <%end if%>><%=RSland("bopael")%></option>   
<%
RSland.MoveNext
Loop

' Lukker databsen
objlandConn.Close
Set objlandConn = Nothing
%>

Jeg vil være utrolig glad for en hjælpende hånd.
Avatar billede Syska Mester
16. februar 2013 - 14:29 #1
Du skal escape dem ...

"'" skal, hvis jeg husker rigtigt være "''" ...

Men måske den tråd fra SO kan  hjælpe dig videre: http://stackoverflow.com/questions/12604849/is-it-possible-to-escape-a-single-quote-in-sql-server-without-another-single-quo

mvh
Avatar billede Slettet bruger
16. februar 2013 - 19:40 #2
Tak for svaret, men det går desværre ikke, idet landenavnet ikke skal ændres, men programmeringen i søgning.

I ASP.NET kan man lave noget der ligner dette, og som løser problemet:

string testbopael = Bopael.SelectedItem.Value.Replace("'","\''");
    selectSQL += " and Bopael ='" + testbopael + "' ";

Kan man ikke lave noget tilsvarende i ASP, jeg kan desværre ikke.
Alle forslag er meget velkomne.

Mvh
Carl
Avatar billede keysersoze Guru
16. februar 2013 - 19:59 #3
Replace(dinvariabel, "'", "''")

Men uanset om vi taler ASP.NET eller klassisk ASP er det ikke den rigtige tilgang til det - du bør arbejde med parametre; http://www.web-dev.dk/post/2008/07/14/SQL-injections-mere-end-bare-et-pling.aspx
Avatar billede Syska Mester
16. februar 2013 - 20:07 #4
#carlb
Jeg har aldrig programmeret i classic ASP, men siden jeg henviste til lader til at bruge classic ASP.

Synes ikke jeg skrev du skulle ændre navnet, men escape det i din SQL.

Linket jeg henviser til bruger igen ASP.

Du kan også gøre som #keysersoze skriver, med at escape det, som jeg også skrev i min først post.

Som #keysersoze også skriver, bør du kigge på parametre, det søger for alt escaping ...

Hvis du gør det som du er ved nu, er der rimelig sikkert åbnet for SQL Injections ... :-)

Kan se #keysersoze link også henviser til løsningen med classic asp og parameters.

Så min råd er nok at du kigger på de links igen eller mere præcis hvorfor den løsning ikke virker for dig.

Fortsat god weekend.
Avatar billede arne_v Ekspert
16. februar 2013 - 20:48 #5
Det er naeppe den viste kode som giver fejlen.

Men uanset det, saa vil etr skift til brug af parametre med 99% sikkerhed loese problemet.
Avatar billede Slettet bruger
19. februar 2013 - 11:10 #6
Rigtig mange tak for svarene. Jeg er en klovn til kodning og har opgivet at få det til at virke. Ham der plejer at hjælpe mig er desværre ikke mere.

Er der en, selvfølgelig mod betaling, kan omskrive denne side for mig?

Hvis, så drop lige mail, så sender jeg filen.

Mvh
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester