SqlCommand-Parameter können nur zum Übergeben von Daten verwendet werden. Sie können sie nicht zum Ändern der SQL-Anweisung verwenden (z. B. das Hinzufügen zusätzlicher Felder zu einer SELECT-Anweisung). Wenn Sie die SQL-Anweisung ändern müssen, würde ich vorschlagen, einen StringBuilder zu verwenden, um die TSQL-Anweisung zu erstellen.
Um weiter zu gehen, verkettet .Net die SQL nicht vor dem Senden an SqlServer (zumindest nicht in der direkten Art, die Sie erwarten könnten). Es ruft tatsächlich eine gespeicherte Prozedur auf und übergibt die Argumente separat. Dadurch kann Sql Server den Abfrageplan zwischenspeichern und die Leistung von Sie tsql optimieren.
Wenn Sie das SqlCommand schreiben würde ...
var cmd = new SqlCommand("SELECT * FROM MyTable WHERE MyID = @MyID", conn);
cmd.Parameters.AddWithValue("@MyID", 1);
cmd.ExecuteNonQuery();
Dies ist Tsql, die auf SQL Server ausgegeben wird ...
exec sp_executesql N'SELECT * FROM MyTable WHERE MyID = @MyID',N'@MyID int',@MyID=1
Sie mehr über sp_executesql on MSDN lesen kann.
Danke ... wie ich supported :) habe schon einen "Trick" mit einem String Builder gemacht, aber sorge mich um die SQL Injection –
Du solltest trotzdem einen SqlCommand mit Parametern für die Werte verwenden. Wenn Sie Benutzern erlauben, die Felder einzugeben, dann stellen Sie sicher, dass die Feldnamen gültig sind (zumindest nur gültige Zeichen enthalten), bevor Sie sie zum SQL hinzufügen. – Brian