2016-08-02 3 views
0

私のmysqlデータベースのすべてのチェックボックスを更新するためにforeachループを使用しようとしています。C#Foremsループwith mySQLコマンドパラメータ

これは私が持っているものです:CMDのPARAMで

string Query = "update agenda.exercises set @checkboxname='1' where Date='" + currentDate + "';"; 

:私は、コマンドのparamを削除し、通常のテキストにそれを回すときMyCommand2.Parameters.AddWithValue("@checkboxname", isTenured);

、それが動作します。コマンドparamをテキストとして使用しようとすると、動作しません。

は、ここに私の完全なコードです:

foreach (DataColumn dc in allCheckboxes.Columns) 
{ 
    MessageBox.Show(dc.ToString()); 

    //var field1 = dtRow[dc].ToString(); 
    string Query = "update agenda.exercises set @checkboxname='1' where Date='" + currentDate + "';"; 

    MySqlConnection MyConn2 = new MySqlConnection(MyConnection2); 
    MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2); 
    MyCommand2.Parameters.AddWithValue("@checkboxname", dc.ToString()); 

    MySqlDataReader MyReader2; 
    MyConn2.Open(); 
    MyReader2 = MyCommand2.ExecuteReader(); 

    while (MyReader2.Read()) 
    { 

    } 

    MyConn2.Close(); 
} 

誰かが私が間違ってやっているものを私に伝えることができますか?

+0

カラム名に 'SqlParameter'を使用することはできません – Fabio

+0

パラメータはカラム名ではなく、値用です。だからあなたのプレーンテキストは "作品" – Takarii

答えて

0

パラメータとして列名を使用すると、代わりにパラメータに値を入力する必要があります。このような

何か:

foreach (DataColumn col in allCheckboxes.Columns) 
{ 
    string Query = "update agenda.exercises set " + col.ToString() + " = @value where Date = @CurrentDate;"; 
    using (MySqlConnection MyConn2 = new MySqlConnection(MyConnection2)) 
    { 
     using (MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2)) 
     { 
      MyCommand2.Parameters.AddWithValue("@Value ", true); 
      MyCommand2.Parameters.AddWithValue("@CurrentDate", currentDate); 
      MyConn2.Open(); 
      MyCommand2.ExecuteNonQuery(); 
     } 
    } 
} 
+0

なぜdownvote? – GuidoG

+0

OPは異なる列を更新する必要があります(これに基づいて 'CheckBox'がチェックされています)。 – Fabio

+0

@Fabio [OK]私はこれについて私の答えを更新したことを逃した – GuidoG

0

あなたは、列名にSqlParameterを使用することはできません。
パラメータなしでクエリに列名を入力できます。しかし、間違いでもハードコードされた値(例えばtrue

foreach (DataColumn dc in allCheckboxes.Columns) 
{ 
    string Query = $"UPDATE agenda.exercises SET {dc.ToString()} = @True 
        WHERE Date = @CurrentDate;"; 
    using (MySqlConnection MyConn2 = new MySqlConnection(MyConnection2)) 
    { 
     using (MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2)) 
     { 
      MyCommand2.Parameters.AddWithValue("@True ", true); 
      MyCommand2.Parameters.AddWithValue("@CurrentDate", currentDate); 
      MyConn2.Open(); 
      MyCommand2.ExecuteNonQuery(); 
     } 
    } 
} 

個人的に私は(動的SQLクエリを作成します)、私はすべてのチェックボックスのための独自のメソッドを作成します。このアプローチを好まないために、渡された値のためSqlParameterを使用しています。