C# 以列表为参数的C查询
我想重构以下语句,将where businessID=something更改为一个语句,在该语句中我提供了一个包含所有可能ID的字符串列表,例如列表中的where businessID。现在查询是在for循环中为每个Id执行的,我猜这并不是真正的性能。我似乎找不到关于如何在准备好的语句中使用字符串列表作为参数的信息C# 以列表为参数的C查询,c#,C#,我想重构以下语句,将where businessID=something更改为一个语句,在该语句中我提供了一个包含所有可能ID的字符串列表,例如列表中的where businessID。现在查询是在for循环中为每个Id执行的,我猜这并不是真正的性能。我似乎找不到关于如何在准备好的语句中使用字符串列表作为参数的信息 using (SqlConnection myConnection = new SqlConnection("Data Source=.\\SERVER;Initial Catalo
using (SqlConnection myConnection = new SqlConnection("Data Source=.\\SERVER;Initial Catalog=DB;Integrated Security=True;TrustServerCertificate=True;User Instance=False"))
using (SqlCommand myCommand = myConnection.CreateCommand())
{
myConnection.Open();
myCommand.CommandText = "SELECT BusinessName FROM Businessess WHERE BusinessID = @Param2";
myCommand.Parameters.AddWithValue("@Param2", myParam2);
using (SqlDataReader reader = myCommand.ExecuteReader())
{
if (reader.Read())
{
string businessName = reader.GetString(reader.GetOrdinal("BusinessName"));
MessageBox.Show(businessName);
}
else
{
MessageBox.Show(string.Format("Sorry, no business found with id = {0}", myParam2));
}
}
}
通过在@Param2中添加逗号分隔的ID,可以使用而不是相等
确定指定的值是否与子查询或列表中的任何值匹配
正如@Prescott建议您从列表中创建逗号分隔字符串的方法一样,您可以将AddWithValue设置为
另一方面,不要尝试使用存储过程而不是内联查询,请参阅比较 首先创建将列表转换为逗号分隔的字符串
string commaSeparatedList = yourlist.Aggregate((a, x) => a + ", " + x);
将=改为In,并将@Param放在括号之间
myCommand.CommandText = "SELECT BusinessName FROM Businessess WHERE BusinessID IN ( @Param2 )";
将字符串commaSeparatedList作为参数添加到命令中
myCommand.Parameters.AddWithValue("@Param2", commaSeparatedList );
可能重复的我会添加,如果你有列表,你可以做字符串。加入,列表;创建以逗号分隔的字符串以传递到parameter@Prescott这不是很容易sql注入吗?不,您将参数设置为逗号分隔id的字符串,这是一个参数-因此它被正确转义。您可以使用string.Join,yourlist代替聚合。欢迎使用堆栈溢出!你能解释一下为什么这个代码能回答这个问题吗?代码唯一的答案是,因为他们不教解决方案。
myCommand.CommandText = "SELECT BusinessName FROM Businessess WHERE BusinessID IN ( @Param2 )";
myCommand.Parameters.AddWithValue("@Param2", commaSeparatedList );