2016-10-11 14 views
1

SQLデータベース内のテーブルに配列値を書き込むためのヘルプを探しています。 配列はすでにすべての値を計算しており、これらの値をデータベースに挿入します。しかし、コードを実行すると、「MySql.Data.MySqlClient.MySqlException型の未処理の例外がMySql.Data.dllで発生しました」というエラーメッセージが表示されます配列値をSQLデータベースに書き込む

追加情報:パラメータ '@PE'は既にあります定義されました。

前のパラメータを削除すると、各パラメータで同じことが言えます。

私はこのコードを別の形式でデータベースに書き込むためにこのコードを使用していて、うまくいきました。どんな助けも素晴らしいだろう。私のコードがある

、あなたのコードを理解している場合

 { 
      string myconnection = "datasource=localhost;port=3306;username=root;password=1234"; 
      MySqlConnection myconn = new MySqlConnection(myconnection); 
      MySqlDataAdapter MyDataAdaptor = new MySqlDataAdapter(); 
      MyDataAdaptor.SelectCommand = new MySqlCommand("select * lossdatabase.forecasttable;", myconn); 
      MySqlCommandBuilder cb = new MySqlCommandBuilder(MyDataAdaptor); 
      myconn.Open(); 


     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 


     string constring = "datasource=localhost;port=3306;username=root;password=1234; "; 
     string query = " insert into lossdatabase.forecasttable (PE, Production_Time, Potential) VALUES(@PE, @Production_Time, @Potential;"; 



     MySqlConnection conLossDB = new MySqlConnection(constring); 
     MySqlCommand cmdLossDB = new MySqlCommand(query, conLossDB); 


     for (int i=0; i<366; i++) 
     { 
      cmdLossDB.Parameters.AddWithValue("@PE", textBox2.Text); 
      cmdLossDB.Parameters.AddWithValue("@Production_Time", forecast[i,2]); 
      cmdLossDB.Parameters.AddWithValue("@Potential", forecast[i,3]); 


     } 




     MySqlDataReader myReader; 
     try 
     { 
      conLossDB.Open(); 
      myReader = cmdLossDB.ExecuteReader(); 
      MessageBox.Show("Forecast Results Saved"); 


      while (myReader.Read()) 
      { 

      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
+0

'select * FROM lossdatabase.forecasttable;'あなたのFROMを忘れました。 – Jens

+0

あなたの挿入クエリも最後に ')'が欠けています。 – Jens

+0

"MySqlCommand cmdLossDB = ..."行をループに移動し、ループ内でクエリを実行する必要があります。 –

答えて

0

を試してみてください、あなたはあなたの配列内のすべての要素に対して新しいパラメータを追加しています。あなたはforループ内で変数に値を追加し、forループはこのような何かを終了した後、一度パラメータを追加する必要があります

MySqlDataReader myReader; 
try 
{ 
    conLossDB.Open(); 
    for (int i = 0; i < 366; i++) 
    { 
     MySqlCommand cmdLossDB = new MySqlCommand(query, conLossDB); 
     cmdLossDB.Parameters.AddWithValue("@PE", textBox2.Text); 
     cmdLossDB.Parameters.AddWithValue("@Production_Time", forecast[i, 2]); 
     cmdLossDB.Parameters.AddWithValue("@Potential", forecast[i, 3]); 
     cmdLossDB.ExecuteNonQuery(); 
    } 

    MessageBox.Show("Forecast Results Saved"); 

} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

私は予測を想定し、文字列の配列である、あなたがのためにキャストする必要があるかもしれません他の種類。 @Jensと@ David_001が指すエラーも修正する必要があります。

+0

あなたの提案に基づいて自分のコードを修正しましたJensとDavid_001の2つのコメントだけでなく、 コマンド実行中に致命的なエラーが発生することはありません。 MySqlDataReaderでコードの最後の部分から来ている必要がありますが、もう一度、どのように対処するかわからない? @Ricardo Pontual – Loplac92

+0

私のコードを更新しました。私は 'ExecuteReader'を' ExecuteNonQuery'で置き換えました。これは挿入コマンドだからです。今それはあなた次第です –

関連する問題