Frage

Die Übernahme von einigem Code von meinem Vorgänger und ich fand eine Abfrage, die den Like-Operator verwendet:

* FROM Lieferanten SELECT WHERE SUPPLIER_NAME like '%' + name +% ';

Der Versuch, SQL-Injection-Problem zu vermeiden und diese parametrieren, aber ich bin nicht ganz sicher, wie dies erreicht werden würde. Irgendwelche Vorschläge?

Notiz, ich brauche eine Lösung für klassische ADO.NET - ich habe nicht wirklich grünes Licht diesen Code zu wechseln, um so etwas wie LINQ

.
War es hilfreich?

Lösung

versuchen Sie dies:

var query = "select * from foo where name like @searchterm";
using (var command = new SqlCommand(query, connection))
{
  command.Parameters.AddWithValue("@searchterm", String.Format("%{0}%", searchTerm));
  var result = command.ExecuteReader();
}

das Framework wird automatisch mit den unter Angabe Fragen.

Andere Tipps

Sie einfach parametrieren Anfrage:

SELECT * FROM suppliers WHERE supplier_name like '%' + @name + '%'

Jetzt können Sie Ihre „name“ Variable in die @name Parameter übergeben und die Abfrage, ohne Gefahr von Injection-Angriffe ausführt. Auch wenn Sie in so etwas wie „‚‘OR wahr -“ übergeben. Es wird immer noch funktionieren

In Entity 6 Rahmen es wie folgt von Native SQL getan werden könnte:

List<Person> peopleList = contex.People.SqlQuery(
    @"SELECT * FROM [Person].[Person]
       WHERE [FirstName] LIKE N'%' + @p0 + '%' ", "ab").ToList();

oder

List<Person> peopleList = contex.People.SqlQuery(
    @"SELECT * FROM [Person].[Person]
       WHERE [FirstName] LIKE N'%' + @name + '%' ",
    new SqlParameter("@name", "ab")).ToList();

Sie können aber auch nur LINQ to Entities direkt:

List<Person> peopleList1 = contex.People.Where(s => s.FirstName.Contains("ab")).ToList();

Kurz anwser:

1) name.Replace ( "'", " ''") .... Ersetzen Sie alle Escape-Zeichen, die Ihre Datenbank (einfache Anführungszeichen sind die am häufigsten)

haben

2), wenn Sie mit einer Sprache, wie .net Verwendung parametrisierte Abfragen

sql="Insert into Employees (Firstname, Lastname, City, State, Zip, Phone, Email) Values ('" & frmFirstname.text & "', '" & frmLastName & "', '" & frmCity & "', '" & frmState & "', '" & frmZip & "', '" & frmPhone & "', '" & frmEmail & "')"

Das oben gezeigte ersetzt wird mit unter der

Dim MySQL as string = "Insert into NewEmp (fname, LName, Address, City, State, Postalcode, Phone, Email) Values (@Firstname, @LastName, @Address, @City, @State, @Postalcode, @Phone, @Email)" 

With cmd.Parameters:
    .Add(New SQLParameter("@Firstname", frmFname.text))
    .Add(New SQLParameter("@LastName", frmLname.text))
    .Add(New SQLParameter("@Address", frmAddress.text))
    .Add(New SQLParameter("@City", frmCity.text))
    .Add(New SQLParameter("@state", frmState.text))
    .Add(New SQLParameter("@Postalcode", frmPostalCode.Text))
    .Add(New SQLParameter("@Phone", frmPhone.text))
    .Add(New SQLParameter("@email", frmemail.text))
end with

3) Benutzer Stored Procs

4) verwendet Linq to SQL, wieder, wenn Sie mit .net

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top