Nehmen wir nur an, ich muss einen SQL-Befehl in Entity Framework direkt ausführen. Ich habe Probleme, herauszufinden, wie Parameter in meiner SQL-Anweisung verwendet werden. Das folgende Beispiel (nicht mein wirkliches Beispiel) funktioniert nicht.
var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = @FirstName WHERE Id = @Id";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
Mit der ExecuteSqlCommand-Methode können Sie keine benannten Parameter wie in ADO.Net übergeben, und die Dokumentation für diese Methode enthält keine Beispiele für die Ausführung einer parametrisierten Abfrage.
Wie gebe ich die Parameter richtig an?
entity-framework
entity-framework-4.1
Jessegavin
quelle
quelle
Es stellt sich heraus, dass dies funktioniert.
quelle
SqlParameter("@paramName", value)
stattdessen.Du kannst entweder:
1) Übergeben Sie Rohargumente und verwenden Sie die {0} -Syntax. Z.B:
2) Übergeben Sie die Argumente der DbParameter-Unterklasse und verwenden Sie die @ ParamName-Syntax.
Wenn Sie die erste Syntax verwenden, wird EF Ihre Argumente tatsächlich mit DbParamater-Klassen umschließen, ihnen Namen zuweisen und {0} durch den generierten Parameternamen ersetzen.
Die erste Syntax wird bevorzugt, da Sie keine Factory verwenden müssen oder nicht wissen, welche Art von DbParamaters erstellt werden soll (SqlParameter, OracleParamter usw.).
quelle
Die anderen Antworten funktionieren bei Verwendung von Oracle nicht. Sie müssen
:
anstelle von verwenden@
.quelle
Versuchen Sie dies (bearbeitet):
Die vorherige Idee war falsch.
quelle
Für Entity Framework Core 2.0 oder höher ist der richtige Weg, dies zu tun:
Beachten Sie, dass Entity Framework die beiden Parameter für Sie erstellt, sodass Sie vor SQL Injection geschützt sind.
Beachten Sie auch, dass es NICHT ist:
weil dies Sie NICHT vor SQL Injection schützt und keine Parameter erzeugt werden.
Sehen Sie dies für mehr.
quelle
ctx.Database.ExecuteSqlCommand("Update [User] SET FirstName = {firstName} WHERE Id = {id}", firstName, id);
FormattableString
. Du hast recht und das ist ziemlich cool!Vereinfachte Version für Oracle. Wenn Sie OracleParameter nicht erstellen möchten
quelle
Das ist so einfach !!!
Bild zur Kenntnis der Parameterreferenz
quelle
Für die asynchrone Methode ("ExecuteSqlCommandAsync") können Sie sie folgendermaßen verwenden:
quelle
Wenn Ihre zugrunde liegenden Datenbankdatentypen varchar sind, sollten Sie sich an den folgenden Ansatz halten. Andernfalls hätte die Abfrage einen enormen Einfluss auf die Leistung.
Sie können den SQL-Profiler überprüfen, um den Unterschied festzustellen.
quelle
Verwendung:
quelle
ExecuteSqlCommand()
Sie sollten sicher sein, die spezifische Frage zu beantworten, die beim Posten von Antworten gestellt wird.Mehrere Parameter in einer gespeicherten Prozedur mit mehreren Parametern in vb:
quelle
Gespeicherte Prozeduren können wie folgt ausgeführt werden
quelle
Für .NET Core 2.2 können Sie
FormattableString
für dynamisches SQL verwenden.quelle