mboost-dp1
Problem med apostrof i SQL (og C#)
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg er ved at programmere et program til min bog-database i C#. Nu er problemet så, at SQL ikke tillader apostrof i fx et navn.
C#:
string query = "INSERT INTO Author (id, name) VALUES (" + id + ",'" + name + "');";
det lille stykke kode ville ikke fungere hvis navnet var: O'Brien.
Hvordan løser jeg dette problem?
C#:
string query = "INSERT INTO Author (id, name) VALUES (" + id + ",'" + name + "');";
det lille stykke kode ville ikke fungere hvis navnet var: O'Brien.
Hvordan løser jeg dette problem?
#6
Udmærket idé, det virker faktisk uden problemer, når bare lige man husker at ændre det igen når man udskriver teksten.
#7
Tak for svaret men det virker dog ikke (eller også kan jeg bare ikke finde ud af det). Problemet består stadig i, at SQL ikke kan lide, at der står 'O'Brien'.
Saxov's idé er dog lidt en "halv løsning", men det virker da.
Udmærket idé, det virker faktisk uden problemer, når bare lige man husker at ændre det igen når man udskriver teksten.
#7
Tak for svaret men det virker dog ikke (eller også kan jeg bare ikke finde ud af det). Problemet består stadig i, at SQL ikke kan lide, at der står 'O'Brien'.
Saxov's idé er dog lidt en "halv løsning", men det virker da.
Trident:
Husker du at assigne .Replace(..) til din variable igen?
Hvis du ikke gør det påvirkes indholdet ikke, da en String ikke kan ændres direkte (kort fortalt: String + String -> Char[] + CHar[] -> String).
[Edit]
Husk \ i stedet for i quote miljøer (tak hmn!)
Husker du at assigne .Replace(..) til din variable igen?
String a = "O'Brien", b = "";
b = a.Replace(@"'", @"\'");
Console.WriteLine(a); // O'Brien
Console.WriteLine(b); // O\'Brien
Hvis du ikke gør det påvirkes indholdet ikke, da en String ikke kan ændres direkte (kort fortalt: String + String -> Char[] + CHar[] -> String).
[Edit]
Husk \ i stedet for i quote miljøer (tak hmn!)
Som programmør ærgrer jeg mig lidt over de mange dårlige svar, selvom det er positivt med den store velvilje til at hjælpe.
#1 Trident:
Med Microsoft SQL Server og Microsoft Access skal du blot lave ' om til '' (dvs. to af samme slags), så fungerer det (MySQL kræver \', hvilket nok var det, der forvirrede de fleste). Du bør dog aldrig vælge den løsning, fordi du så i enkelte tilfælde kan glemme det (og det åbner op for sårbarheder, hvor man kan manipulere din database fuldstændigt).
Jeg vil derfor råde dig til, at du kigger på DbParameter, der så sørger for alt det sure arbejde med at konvertere forbudte tegn og tage de forbehold, du ellers skulle klare manuelt. Du skal på siden finde 'Inheritance Hierarchy' og så vælge den variant, du benytter (formentlig OdbcParameter), så finder du eksempler på anvendelsen.
#6 Saxov:
Det er jo ikke en løsning at fjerne kompatibilitet for forskellige tegn. ` kan jo forekomme helt legitimt, men det umuliggør man, hvis man slår to tegn sammen til et. I stedet bør man selvfølgelig altid anvende de rigtige metoder til at sikre konsistens i blandt ens data.
#1 Trident:
Med Microsoft SQL Server og Microsoft Access skal du blot lave ' om til '' (dvs. to af samme slags), så fungerer det (MySQL kræver \', hvilket nok var det, der forvirrede de fleste). Du bør dog aldrig vælge den løsning, fordi du så i enkelte tilfælde kan glemme det (og det åbner op for sårbarheder, hvor man kan manipulere din database fuldstændigt).
Jeg vil derfor råde dig til, at du kigger på DbParameter, der så sørger for alt det sure arbejde med at konvertere forbudte tegn og tage de forbehold, du ellers skulle klare manuelt. Du skal på siden finde 'Inheritance Hierarchy' og så vælge den variant, du benytter (formentlig OdbcParameter), så finder du eksempler på anvendelsen.
#6 Saxov:
Det er jo ikke en løsning at fjerne kompatibilitet for forskellige tegn. ` kan jo forekomme helt legitimt, men det umuliggør man, hvis man slår to tegn sammen til et. I stedet bør man selvfølgelig altid anvende de rigtige metoder til at sikre konsistens i blandt ens data.
#11,
Bare rolig, når jeg selv laver kode bruger jeg skam masser af tid på at sikre at det ikke bare bliver sådanne hurtige løsninger, men mange gange er det, jft. min erfaring, rart at man kan lave en grim fix, og så flag'e den, og komme vidre med ens produkt.
Jeg har set for mange der sidder med et problem i 2-3 dage, istedet for blot at lave en sub-optimal løsning, der virker og så komme vidre.
For en hel del af de problemer man normalt oplever, er nogle man løser når man lige kommer vidre.. Du ved, man kan ikke se skoven for bare træer.. ;)
Bare rolig, når jeg selv laver kode bruger jeg skam masser af tid på at sikre at det ikke bare bliver sådanne hurtige løsninger, men mange gange er det, jft. min erfaring, rart at man kan lave en grim fix, og så flag'e den, og komme vidre med ens produkt.
Jeg har set for mange der sidder med et problem i 2-3 dage, istedet for blot at lave en sub-optimal løsning, der virker og så komme vidre.
For en hel del af de problemer man normalt oplever, er nogle man løser når man lige kommer vidre.. Du ved, man kan ikke se skoven for bare træer.. ;)
#11
Tak for tippet om DbParameter, men jeg kan nu ikke helt finde ud af at bruge det. Er det noget som skal implementeres i databasen, eller skal det programmeres og hvordan løser det egentlig problemet med fx apostrof?
Jeg bruger en Microsoft Access database, hvis det skulle have en betydning.
Tak for tippet om DbParameter, men jeg kan nu ikke helt finde ud af at bruge det. Er det noget som skal implementeres i databasen, eller skal det programmeres og hvordan løser det egentlig problemet med fx apostrof?
Jeg bruger en Microsoft Access database, hvis det skulle have en betydning.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.