参数& # 39;. . & # 39;已经被定义了
本文关键字:定义 参数 | 更新日期: 2023-09-27 17:54:28
我在网上找到了一些关于这个问题的解决方案和建议,但是,我还不能把它们应用到我的解决方案中。我写了一个个人MySQL包装器,它的特点如下
public async Task<IEnumerable<DatabaseFieldSet>> QueryParamsAsync(string query, string[] parameter,
string[] value)
{
if (!IsConnected)
await ConnectAsync();
var rows = new List<DatabaseFieldSet>();
using (var cmd = CreateCommand(query))
{
foreach (var str in parameter)
{
foreach (var val in value)
{
//cmd.Parameters.Add(str, MySqlDbType.VarChar).Value = val;
cmd.Parameters.AddWithValue(str, val);
}
}
using (var reader = await cmd.ExecuteReaderAsync())
{
uint currentRowIndex = 0;
while (await reader.ReadAsync())
{
var row = new DatabaseFieldSet(currentRowIndex);
var fields = new List<DatabaseField>();
for (var i = 0; i < reader.FieldCount; ++i)
{
var column = new DatabaseReference((uint) i);
fields.Add(new DatabaseField(reader[i], column, row));
}
row.Fields = fields;
rows.Add(row);
currentRowIndex++;
}
}
}
return rows;
}
我试着添加
cmd.Parameters.Clear();
在不同的位置,没有一个工作或在执行时抛出致命错误。我希望有人能告诉我把这条语句放在哪里。
你做错了。它应该像下面这样。你的双foreach
导致问题,你最终试图再次添加相同的参数,所以错误。您应该定义一个计数器变量,并访问值数组中的每个项。
int i = 0;
foreach (var str in parameter)
{
cmd.Parameters.AddWithValue(str, val[i]);
i++;
}