2016-07-01 15 views
0

この問題については、インターネット上でいくつかの解決策や提案が見つかりましたが、まだ解決できませんでした。私はどれも働いていないか、実行中に致命的なエラーを投げていた、これはパラメータ '?...'は既に定義されています

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(); 

を追加しようとした特徴の個人的なMySQLのラッパーを書きました。誰かがこの単一の声明をどこに置くべきか教えてくれることを願っています。

答えて

1

あなたは間違っています。むしろ以下のようにすべきです。ダブルforeachが問題の原因となり、最終的には同じパラメータを再度追加しようとしているため、エラーが発生します。カウンタ変数を定義し、値配列のすべての項目にアクセスする必要があります。

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

ありがとうございました!私は完全にオフだった! – Jony

関連する問題