Ich bin neu bei Asp.net und ich fange gerade an, mit Klassen zu arbeiten. Ich habe vor kurzem eine Klasse erstellt, die die meisten meiner SQL-Abfragen für mich behandelt, so dass ich nicht immer neue Verbindungen über alle meine Dateien erstellen muss.parametrisierte Abfragen vs. SQL-Injektion
Eine der Methoden, die ich erstellt habe, nimmt eine SQL-Abfrage als Parameter und gibt das Ergebnis zurück. Ich weiß, dass ich parametrisierte Abfragen verwenden sollte, um SQL-Injektionen zu vermeiden. Meine Frage ist, wie kann ich dies tun, wenn ich die Abfrage als String-Parameter übergeben?
Zum Beispiel, hier ist eine Methode, die ich nennen werde:
public static DataTable SqlDataTable(string sql)
{
using (SqlConnection conn = new SqlConnection(DatabaseConnectionString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Connection.Open();
DataTable TempTable = new DataTable();
TempTable.Load(cmd.ExecuteReader());
return TempTable;
}
}
Also aus einer anderen Datei würde Ich mag diese Methode verwenden, etwa so:
DataTable dt = new DataTable();
dt = SqlComm.SqlDataTable("SELECT * FROM Users WHERE UserName='" + login.Text + "' and Password='" + password.Text + "'");
if (dt.Rows.Count > 0)
{
// do something if the query returns rows
}
Das funktioniert aber trotzdem anfällig für Injektionen richtig? Gibt es eine Möglichkeit, die Variablen als Parameter an die Zeichenkette zu übergeben? Ich weiß, dass ich das tun kann, wenn ich ein neues SQLCommand-Objekt für die Abfrage erzeuge und Parameter.AddWithValue verwende, aber ich möchte, dass alle meine SQL-Befehle in der separaten Klasse sind.
Warum Sie Inline-Abfrage verwenden? Sie können die Speicherprozedur verwenden, um SQL-Injektionen zu vermeiden. Speicherprozedur ist eine zuvor ausgeführte SQL-Abfrage. So wird es schneller als Inline-Abfrage ausgeführt. ich schlage nur vor, die Store-Prozedur zu verwenden. –
Ich war einmal dort, ich *** stark *** Sie vertiefen sich in Lernen und ORM (Ich wählte Entity Framework). Ich habe viele Stunden damit verbracht, Code zu schreiben, nur um herauszufinden, wie unnötig das war! Bevor es zu spät ist, lernen Sie Entity Framework. Wenn Sie nicht zu komplexe Abfragen und vor allem zu einfachen CRUD-Operationen haben, ist es nicht so schwer zu lernen .. –
Hiren, gespeicherte Prozeduren sind keine vor ausgeführten Abfragen .. Meinen Sie den Ausführungsplan? –