2007-02-28, 09:16
  #1
Medlem
Jag har en BaseDataManager som ärvs av massvis av andra klasser (WebDatamanager, etc.). I BaseDataManager finns en funktion, typ ExecSQLCommand(string sql), för att exekvera SQL-kommandon mot databasen och returnera ett dataset. Till ExecSQLCommand kommer alltså färdigkonstruerade SQL-kommandon, redo att köras.

Problemet är att användarna ibland skriver in en ', vilket gör att satsen kraschar. Finns det något enkelt sätt att undvika detta, förutom att ersätta ' med '' i alla inargument i alla funktioner i alla sub-Datamangerns (handlar om hundratals...)?

Jag söker en tvärsäker funktion som fixar strängar som:
EXEC myStoredProcedure @name='Sinead O'Connor', @i=3

Mycket tacksam för tips!
Citera
2007-03-01, 00:07
  #2
Medlem
Ingen?
Citera
2007-03-01, 09:26
  #3
Medlem
Sane?s avatar
Rätt så kört. Du kommer ju aldrig kunna veta om du parsat korrekt om nån användare skriver in en riktigt skum sträng som innehåller @ , = och liknande.
Citera
2007-03-01, 13:10
  #4
Medlem
Jag kan inte just C#, men det du letar efter är en escapefunktion, som ersätter alla specialtecken i strängen med escapesekvenser.
Citera
2007-03-01, 20:29
  #5
Medlem
Tejpmannens avatar
Citat:
Ursprungligen postat av rewolbeltsihw
Jag kan inte just C#, men det du letar efter är en escapefunktion, som ersätter alla specialtecken i strängen med escapesekvenser.

Jag är inte någon expert på detta, men det mesta jag har läst antyder att Rätt Sätt<tm> är att bygga parameteriserade frågor snarare än att köra strängen genom en escape-funktion.
Citera
2007-03-03, 17:18
  #6
Medlem
comuss avatar
Är inte hundra på att det hjälper men istället för att köra

Kod:
SqlCommand command = new SqlCommand("EXEC myStoredProcedure @name='Sinead O'Connor', @i=3", connection);

så kan du ju köra

Kod:
SqlCommand command = new SqlCommand("myStoredProcedure", connection);
command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add("@name", SqlDbType.NVarChar).Value = "Sinead O'Connor";
command.Parameters.Add("@i", SqlDbType.Int).Value = 3;

Det kan lösa ditt problem... Nu har jag skrivit koden ovan från huvudet så den är nog inte direkt körbar men på ett ungefär
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in