In einer vorhandenen Codebasis gibt es hardcoded SQL und ich möchte SQL-Injektion vermeiden.Wie SqlParameter in SELECT SqlCommand ersetzt werden?
Der folgende Code verwendet SqlCommand zusammen mit SqlParameters. Die Abfrage gibt keine Daten zurück. Wenn ich jedoch die Parameter entferne, gibt die Abfrage die richtigen Ergebnisse zurück.
Wie kann ich SqlParameters mit einer SELECT-Anweisung verwenden?
string atUsername = "@username"; //does not work
//string atUsername = "Demo1"; //THIS WORKS
string atPassword = "@password"; //does not work
//string atPassword = "222"; //THIS WORKS
string sql = @"SELECT userId, userName, password, status, roleId, vendorId
FROM users
WHERE username = '" + atUsername + "' AND password = '" + atPassword + "'";
SqlCommand cmd = new SqlCommand(sql);
cmd.Parameters.Add(atUsername, SqlDbType.NVarChar, 20);
cmd.Parameters[atUsername].Value = "Demo1";
//cmd.Parameters.AddWithValue //also does not work
cmd.Parameters.Add(atPassword, SqlDbType.NVarChar, 20);
cmd.Parameters[atPassword].Value = "222";
//cmd.Parameters.AddWithValue //also does not work
SqlConnection conn = new SqlConnection(connStr);
cmd.Connection = conn;
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
Console.WriteLine(dt.Rows != null);
if (dt.Rows != null)
{
Console.WriteLine(dt.Rows.Count);
}
conn.Close();
conn.Dispose();
Ich habe auch erfolglos versucht, Alternativen mit
- SqlCommand.ExecuteReader und SqlDataReader
- IDisposable Muster
ersetzen
cmd.Parameters.Add(atUsername
mitSqlParameter pUsername = new SqlParameter(); pUsername.ParameterName = atUsername; pUsername.Value = "Demo1"; cmd.Parameters.Add(pUsername);"
PS. Ich habe von EntityFramework gehört, aber ich kann EF in diesem Fall nicht verwenden (lange Geschichte).
Entfernen Sie die Umhüllung um Variablennamen. ... = '@username' <- falsch. ... = @username <- richtig. – Evk
Warum hast du es nicht als Antwort angegeben? @Evk – niksofteng
@nikhilvartak Nicht gewöhnt sich noch, um so kleine Dinge wie Antworten zu setzen :) – Evk