Ich möchte eine Sql-Anweisung aufrufen wie:
Select * From Table Where Column in ('value1', 'value2', 'value3')
Ist es so einfach, den Wert eines Befehlsparameters auf " ('value1', 'value2', 'value3')
"?
Ich möchte eine Sql-Anweisung aufrufen wie:
Select * From Table Where Column in ('value1', 'value2', 'value3')
Ist es so einfach, den Wert eines Befehlsparameters auf " ('value1', 'value2', 'value3')
"?
@Charles: Sie gehen in die richtige Richtung, aber wir verwenden parametrisierte Abfragen, um hauptsächlich SQL-Injections zu verhindern. Das Einfügen von 'externen' Werten ( params string[] args
) in Abfragen fest einkodiert sind, sind Probleme vorprogrammiert. Sie können die Argumente iterieren, aber Sie müssen trotzdem Parameter wie diesen verwenden:
string[] values = new [] {"value1", "value2", "value3", "value4"};
StringBuilder query = new StringBuilder("Select * From Table Where Column in (");
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Your connection string");
for(int i = 0; i < columns.Length; i++)
{
string arg = string.Format("@arg{0}", i);
cmd.Parameters.AddwithValue(arg, SanatizeSqlString(columns[i]));
sb.AppendFormat("{0}, ", arg);
}
sb = sb.Remove(sb.Length -2, 2);
sb.Append(")");
cmd.CommandText = sb.ToString();
Auf diese Weise erhalten Sie eine Abfrage wie diese:
select * from table where column in (@arg0, @arg1, @arg2, @arg3)
Wenn Sie nur drei Parameter für die in-Klausel haben, können Sie die Parameter verwenden. Ansonsten können Sie dynamisches SQL erstellen (Vorsicht vor SQL-Injection-Angriffen).
Ein anderer Ansatz besteht darin, eine UDF zu erstellen, die eine begrenzte Zeichenkette annimmt und eine Tabelle zurückgibt:
select * from
table inner join
dbo.fn_stringToTable(@params)
Eine andere Möglichkeit besteht darin, den Commandtype des SqlCommand auf "text" zu setzen und den gesamten Sql-String im Code zu konstruieren... Angenommen, Column ist ein varchar, und Sie haben die Werte in einem String-Array mit dem Namen "paramValues".
StringBuilder sbSql = new StringBuilder
("Select * From Table Where Column in (");
string[] paramValues = new string[] {"value1", "value2", "value3"};
foreach (string val in paramValues)
sbSql.Append("'" + val + "', ");
sbSql = sbSql.Remove(sbSql.Length - 2, 2);
sbSql.Append(")");
SqlCommand cmd = new SqlCommand(sbSql.ToString());
cmd.CommandType = CommandType.Text;
Auch wenn die anderen Antworten hilfreich sind, gibt es noch eine weitere einfache Möglichkeit, die Sie nutzen können string.Format .
Angenommen, Sie haben einen SQL-Befehl wie SELECT * FROM TABLE WHERE Id IN ('1', '2', '3')
:
var IdList = new List<int>() { 1, 2, 3 };
SqlCommand command = new SqlCommand(string.Format("SELECT * FROM TABLE WHERE Id IN ('{0}')", string.Join("', '", IdList)), connection);
Das war's. Mit einem Einzeiler können Sie die Verwendung des IN-Operators erreichen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.