Verwenden Sie parametrisiertes SQL.
Beispiele
Zeichenfolge Verkettungen Ersetzen durch @...
Platzhalter und danach, um die Werte zu Ihrem SqlCommand hinzuzufügen. Sie können den Namen der Platzhalter frei wählen, stellen Sie einfach sicher, dass sie mit dem @
Zeichen beginnen. Ihr Beispiel würde wie folgt aussehen:
var sql = "INSERT INTO myTable (myField1, myField2) " +
"VALUES (@someValue, @someOtherValue);";
using (var cmd = new SqlCommand(sql, myDbConnection))
{
cmd.Parameters.AddWithValue("@someValue", someVariable);
cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text);
cmd.ExecuteNonQuery();
}
Das gleiche Muster für andere Arten von SQL-Anweisungen verwendet wird:
var sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;";
// see above, same as INSERT
oder
var sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;";
using (var cmd = new SqlCommand(sql, myDbConnection))
{
cmd.Parameters.AddWithValue("@someValue", someVariable);
using (var reader = cmd.ExecuteReader())
{
...
}
// Alternatively: object result = cmd.ExecuteScalar();
// if you are only interested in one value of one row.
}
Ein Wort der Vorsicht: AddWithValue
ist ein gute Ausgangspunkt und funktioniert in den meisten Fällen gut. Der Wert, den Sie übergeben, muss jedoch genau mit dem Datentyp des entsprechenden Datenbankfelds übereinstimmen. Andernfalls könnten Sie in einer Situation landen, in der die Konvertierung die Abfrage von using an index verhindert. Beachten Sie, dass einige SQL Server-Datentypen wie char/varchar (ohne vorangestelltes "n") oder Datum keinen entsprechenden .NET-Datentyp aufweisen. In diesen Fällen Add
with the correct data type should be used instead.
Warum sollte ich das tun?
It's more secure: Es stoppt SQL injection. (Bobby Tables won't delete your student records.)
Es ist einfacher: Keine Notwendigkeit, mit einfachen und doppelten Anführungszeichen zu hantieren oder die richtige Zeichenfolge Darstellung Datumsliterale nachzuschlagen.
Es ist stabiler: O'Brien
wird nicht zum Absturz Ihrer Anwendung, nur weil er darauf besteht, seinen seltsamen Namen zu halten.
Andere Datenbankzugriff Bibliotheken
Hinweis: Diese Frage als kanonische Frage für Menschen gedacht, die nicht ihren String-verketteten SQLs bekommen zu arbeiten. [Wenn Sie darüber diskutieren möchten, hier ist die entsprechende Meta-Frage.] (Http://meta.stackoverflow.com/q/315913/87698) – Heinzi
Wenn Sie einen genaueren Blick auf was "SQL Injection" ist und möchten Warum ist es gefährlich? Siehe die Frage: "[Wie kann ich SQL Injection ohne Fachjargon erklären?] (http://security.stackexchange.com/questions/25684/how-can-i-explain-sql-injection-without- Fachjargon) von unserer Information Security-Schwester-Website. –
Sie sollten dies wiki, btw. – Will