参数“?...”已经定义

时间:2016-07-01 20:44:32

标签: c# mysql

我在互联网上发现了一些解决这个问题的解决方案和建议,然而,我还是无法将其应用到我的解决方案中。我写了一个个人的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();

在不同的位置,没有工作或在执行时抛出致命错误。我希望有人可以告诉我在哪里发表这一声明。

1 个答案:

答案 0 :(得分:1)

你做错了。它应该像下面一样。您的双foreach导致问题,并且您最终会尝试再次添加相同的参数,因此错误。您应该定义计数器变量并访问值数组中的每个项目。

        int i = 0;
        foreach (var str in parameter)
        {
                cmd.Parameters.AddWithValue(str, val[i]);
                i++;
        }