gpt4 book ai didi

C# MySQL 用循环添加多个相同的参数

转载 作者:行者123 更新时间:2023-12-01 00:09:05 26 4
gpt4 key购买 nike

更新:由于原始问题已基本得到解答,我已将其标记为已完成。


我有一个 C# 项目,我想在其中查询数据库。 SQL 查询将从表中进行选择,在 WHERE 子句中,我想从 C# 中指定的预定义值列表中筛选结果。

List<string> productNames = new List<string >() { "A", "B", "C" };

foreach (name in productNames)
{
string query = @"
SELECT *
FROM products
WHERE name IN (@name);";

// Execute query
MySqlCommand cmd = new MySqlCommand(query, dbConn);
cmd.Parameters.AddWithValue("name", name);

MySqlDataReader row = cmd.ExecuteReader();
while (row.Read())
{
// Process result
// ...
}
}

但是我收到一个错误:

There is already an open DataReader associated with this Connection which must be closed first

难道不能使用 for 循环以这种方式将参数添加到 SELECT 语句吗?

最佳答案

您需要处置您的对象才能避免异常。但是,您不需要遍历值并为列表中的每个值运行查询。试试下面的代码。它为每个值创建一个参数并将其添加到命令以在“IN (...)”子句中使用。

“使用”关键字也可以处理对象。

List<string> productsIds = new List<string>() { "23", "46", "76", "88" };
string query = @"
SELECT *
FROM products
WHERE id IN ({0});";

// Execute query
using (MySqlCommand cmd = new MySqlCommand(query, dbConn))
{
int index = 0;
string sqlWhere = string.Empty;
foreach (string id in productsIds)
{
string parameterName = "@productId" + index++;
sqlWhere += string.IsNullOrWhiteSpace(sqlWhere) ? parameterName : ", " + parameterName;
cmd.Parameters.AddWithValue(parameterName, id);
}

query = string.Format(query, sqlWhere);
cmd.CommandText = query;
using (MySqlDataReader row = cmd.ExecuteReader())
{
while (row.Read())
{
// Process result
// ...
}
}
}

关于C# MySQL 用循环添加多个相同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42358953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com