【发布时间】:2022-01-06 04:34:38
【问题描述】:
我有以下代码:
List<string> L1 = new List<string>();
int Id = 1;
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = "...";
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM categories WHERE category_id = @Id";
cmd.Parameters.Add(new SqlParameter("@Id", Id));
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
category = reader.GetString(1);
L1.Add(category);
}
}
这给了我 "category_id" 等于 1 的行。
我现在希望 SELECT 语句返回“category_id”等于我给它的值之一的行。
所以一个简单的 SELECT 语句看起来像这样
SELECT * FROM categories WHERE category_id = 1 or category_id = 2
//returns all rows where "category_id" is equal to 1 or 2
问题是我在设置 SELECT 语句时不知道要搜索的值。 我会将值放在字符串、列表或类似的东西中。
我尝试使用 foreach 循环来更改“Id”的值
cmd.Parameters.Add(new SqlParameter("@Id", typeof(int)));
foreach (int val in Values)
{
cmd.Parameters["@Id"].Value = val;
}
但这只是返回“category_id”等于数组“Values”中最后一个值的行。
我曾尝试使用 IN 运算符,但出现错误
cmd.CommandText = "SELECT * FROM categories WHERE category_id IN (@Id)";
cmd.Parameters.Add(new SqlParameter("@Id", Values));
我的最后一个想法是使用循环从值中创建一个字符串。
string ValueString = "0";
foreach (int val in Values)
{
ValueString += ",";
ValueString += Convert.ToString(val);
}
我还没有尝试过这个,但我希望它会给出一个错误,因为列是“category_id”的数据类型是“int”。
有没有办法以数组/列表作为参数来搜索 SQL 数据库,所以它会给出与数组/列表中的一个值相等的每一行。
【问题讨论】:
-
您的 DBMS 是什么? Sql Server 例如支持Table Valued Parameters。
标签: c# sql .net parameters ado.net