多くのケースで試しましたが、適切な結果が得られませんでした。
DataGridView と Button が 1 つあります。
5 つの列を含む 1 つのテーブルがあります。私の Windows アプリケーションでは、datagridview から取得して mysql テーブルに挿入する 3 つの列の値と 2 つの列の値を指定します。
実行時に、datagridview からすべての値を文字列または文字列配列に取得するボタンをクリックすると、datagridview に値を挿入します。次に、mysqlテーブルに挿入します
con = new MySqlConnection(str);
try
{
con.Open();
MySqlCommand cmd = con.CreateCommand();
//cmd.CommandText = "insert into balance values" + "(@i1,@i2,@i3,@i4,@i5)";
//cmd.Parameters.Add("@i1", MySqlDbType.VarChar);
//cmd.Parameters.Add("@i2", MySqlDbType.VarChar);
//cmd.Parameters.Add("@i3", MySqlDbType.VarChar);
//cmd.Parameters.Add("@i4", MySqlDbType.Float);
//cmd.Parameters.Add("@i5", MySqlDbType.VarChar);
//cmd.Parameters["@i1"].Value = busname;
//cmd.Parameters["@i2"].Value = cusname;
//cmd.Parameters["@i3"].Value = this.dataGridView1[0, 0].Value;
//cmd.Parameters["@i4"].Value = this.dataGridView1[1, 0].Value;
//cmd.Parameters["@i5"].Value = "345";
//cmd.ExecuteNonQuery();
string[] st = new string[this.dataGridView1.Rows.Count];
for (int i = 0; i <= this.dataGridView1.Rows.Count; i++)
{
cmd.CommandText = "insert into balance values" + "(@p1,@p2,@p3,@p4,@p5)";
cmd.Parameters.Add("@p1", MySqlDbType.VarChar);
cmd.Parameters.Add("@p2", MySqlDbType.VarChar);
cmd.Parameters.Add("@p3", MySqlDbType.VarChar);
cmd.Parameters.Add("@p4", MySqlDbType.Float);
cmd.Parameters.Add("@p5", MySqlDbType.VarChar);
cmd.Parameters["@p1"].Value = busname;
cmd.Parameters["@p2"].Value = cusname;
cmd.Parameters["@p3"].Value = this.dataGridView1[0, i].Value;
cmd.Parameters["@p4"].Value = this.dataGridView1[1, i].Value;
cmd.Parameters["@p5"].Value = "345";
cmd.ExecuteNonQuery();
}
for ループ内で挿入オプションを使用すると、エラーが発生します。
Parameter '@p1' has already been defined. same error for '@p2', '@p5' also.
コメントしたforループを使わずにやってみました。それはうまくいっています。テーブルにも入れています。しかし、for ループで使用している場合、何が問題なのかわかりません。