我在互联网上发现了一些解决这个问题的解决方案和建议,然而,我还是无法将其应用到我的解决方案中。我写了一个个人的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();
在不同的位置,没有工作或在执行时抛出致命错误。我希望有人可以告诉我在哪里发表这一声明。
答案 0 :(得分:1)
你做错了。它应该像下面一样。您的双foreach
导致问题,并且您最终会尝试再次添加相同的参数,因此错误。您应该定义计数器变量并访问值数组中的每个项目。
int i = 0;
foreach (var str in parameter)
{
cmd.Parameters.AddWithValue(str, val[i]);
i++;
}