Escape-Zeichenfolge (add Schrägstriche) in VB.net?
Ganz einfache Frage (überraschend ich kann nicht finden, eine ähnliche Frage irgendwo): wie kann ich entkommen, Formular-Daten in VB.net? Ich habe diverse Zeilen wie diese:
Dim query As String = "exec sp_Message_insert @clientid='" + pClientId + "', @message='" + pMessage + "', @takenby='" + pUserId + "', @recipients='" + pRecipients + "'"
Wenn ich einen Apostroph in der Meldung dann natürlich das Schrauben bis die Abfrage. Ich habe mir durch die intellisense-Funktionen auf den string, aber nicht sehen, nichts geeignetes...
InformationsquelleAutor DisgruntledGoat | 2009-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was genau meinst du mit Flucht? VB.NET nicht 'Flucht' in der gleichen Weise, dass c-style Sprachen.
Nun, wenn Sie wollen, um sicherzustellen, dass es keine single-qoutes in der pClientId variable, dann haben Sie zwei Möglichkeiten:
Option 1 (empfohlen nicht für dieses Szenario): eine einfache ersetzen. I. e.
Aber, wie bereits erwähnt, ich würde es NICHT tun, für das, was zu sein scheint ein SQL-Befehl. Was ich tun würde, ist
Option 2: Daten, Parameter, Parameter für die DB während der sql-Befehle
Beispiel:
cmd.Parameters.AddWithValue("@clientid", clientId)
ist auch verfügbar.Sie sollten wirklich wickeln Sie die
SqlConnection
undSqlCommand
imUsing
block: msdn.microsoft.com/en-us/library/htd05whh.aspxHeh, sobald ich die Frage gepostet, dachte ich, ich sollte die übergabe von Daten als Parameter statt einer Zeichenfolge. Schuld meinem ex-Chef, er ist derjenige, der mich gelehrt, es zu tun auf diese Weise 😉 ich bin gonna verwenden Sie die erste Methode jetzt, da der client möchte, dass diese schnell behoben, startet aber refactoring sofort.
Welche Datenbank verwenden Sie? Wenn Sie nicht entkommen, die richtigen Zeichen, die Abfrage ist immer noch weit offen für SQL-injection.
Müsste es nicht eine cmd.Prepare() vor dem ausführen? Wenn nicht, was dann gut tut Prepare() zu tun?
InformationsquelleAutor Stephen Wrighton
Wenn Sie wollen, zu entkommen die Saiten dann müssen Sie zunächst sagen, welche Datenbank Sie verwenden. Sie haben, um die richtige Flucht für die jeweilige Datenbank, so dass Sie zu entkommen, all die Zeichen, die Sie müssen, sondern nur diejenigen.
Weiß ich nicht von jeder Datenbank, die verwendet Schrägstrich als escape-Zeichen. MySQL verwendet den umgekehrten Schrägstrich, vielleicht ist das, was du meinst?
Das beste ist, nicht die Flucht der Saiten, sondern auch, um einen parametrierten Abfrage. Beispiel:
InformationsquelleAutor Guffa
Ich denke, man kann nur tun, zwei Apostrophe, das eine zu erstellen. Ich entschuldige mich, wenn das nicht funktioniert, es hat eine Weile, da ich getan habe, ich würde vorschlagen, mit SQL-Parameter, wird diese automatisch mit Ihren speziellen Zeichen und SQL-injection verhindern.
InformationsquelleAutor RiddlerDev
Nicht aufbauen einen string ausführen möchten.
Das ist genau der Grund, warum die SQL-Injection-Angriffe möglich sind.
Stattdessen verwenden Sie eine Data-Access-Schicht, die ermöglicht Ihnen das erstellen von parameter-Objekte und ordnen Sie Sie mit der gespeicherten Prozedur ausführen.
InformationsquelleAutor Bravax
wenn Sie möchten, führen Sie eine Zeichenfolge als Abfrage, sollten Sie den folgenden code verwenden:
InformationsquelleAutor Mike de klerk
So möchte hinzufügen, eine kleine Mitteilung über den Parameter-Namen mit zusammen mit
System.Data.Odbc.OdbcCommand
,nach http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.commandtype
ein Beispiel von hier http://msdn.microsoft.com/en-us/library/system.data.odbc.odbcparametercollection(v=vs. 80).aspx#Y800 :
InformationsquelleAutor XSeryoga