2009-04-23 6 views
1

Ich schreibe ein Programm in. NET2.0 und ich muss die Eingaben vor der Verwendung von ihnen zu entkommen. Leider funktioniert das Standardparametermethodensystem nicht vollständig in dem System, das ich verwende. Mit der ODBCCommand-Klasse kann ich keine? Parameter im Select-Teil der Anweisung (was für die kleinen Tricks erforderlich ist, die ich mache), ohne einen Fehler zu bekommen, also muss ich Strings manuell entschlüsseln, die ein einzelnes Anführungszeichen enthalten können oder nicht ('). Irgendwelche Vorschläge?Standard-Funktion für Escaping-Strings in SQL

Bearbeiten- Beispiel SQL:

Wie würde ich es mag:

INSERT INTO TABLE_A (COLUMN_A, COLUMN_B) 
SELECT (?, COLUMN_C) 
FROM TABLE_B 
WHERE COLUMN_D = ? 

wie es ist:

INSERT INTO TABLE_A (COLUMN_A, COLUMN_B) 
SELECT ('INPUT_VALUE_HERE', COLUMN_C) 
FROM TABLE_B 
WHERE COLUMN_D = ? 

Edit: Sybase ASE ist der DB-Treiber, über ODBC

+2

Können Sie ein Beispiel für die SELECT geben, die Sie ausführen möchten? – Steven

+0

Wenn dies der Spaltenname oder der Tabellenname usw. ist, vergessen Sie nicht, dass Angreifer kein einfaches Angebot für die Injektion benötigen. Andernfalls ? sollte funktionieren, nicht wahr? –

+0

Auch welche Datenbank benutzen Sie? Nicht alle Datenbanken haben denselben Escape-Zeichensatz und abhängig davon, wo in der SELECT-Anweisung Sie sich befinden, benötigen Sie möglicherweise andere Escape-Zeichen. – Steven

Antwort

3
Dim s As String = "Michael O'Flatley" 
Dim escapedString as String = s.Replace("'", "''") 
+0

Was ist mit '%' Symbol? –

+0

Ich kann nicht für Sybase ASE sprechen, aber in SQL Server und Oracle müssten Sie nur% (und _) als Teil einer 'like' -Klausel –

3

Sie können Sie analysieren R-String-Parameter mit dieser Erweiterungsfunktion

public static string SqlEncode(string str) 
{ 
    if (str == null) return String.Empty; 
    return str.Replace("'","''"); 
} 
+1

als Erweiterungsfunktion entschlüsseln, sollte es sich um eine öffentliche statische Zeichenfolge SqlEncode handeln (diese Zeichenfolge str)? –

+0

Behoben für ihn. –

+0

Gute Idee, aber wenn Sie schauen, werden Sie diese .NET2.0 sehen (keine Erweiterungsmethoden). –