2013-12-10 3 views
0

Я хочу добавить новые значения в базу данных MySql из dataGridView1. Сам код кажется правильным, никаких ошибок в Visual Studio 2012, но в моем db нет данных. Вот код, я использую:Вставьте значения DataGridView в базу данных MySql. C#

private void button2_Click(object sender, EventArgs e) 
{ 
    confirm exec = new confirm();  
} 

public class confirm 
{ 
    public void method(DataGridViewCellEventArgs f) 
    { 
     DataGridView dataGridView1 = new DataGridView(); 
     Label label1 = new Label(); // contains User ID which is used for payer_code 
     Label label6 = new Label(); // contains current dayTime 

     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
     if ((bool)dataGridView1.Rows[f.RowIndex].Cells["paidDataGridViewTextBoxColumn"].Value == true) 
     { 
      try 
      { 
       string MyConnectionString = "Server=localhost; Database=contractsdb; Uid=root; Pwd="; 
       MySqlConnection connection = new MySqlConnection(MyConnectionString); 
       MySqlCommand cmd = new MySqlCommand(); 
       cmd = connection.CreateCommand(); 
       connection.Open(); 
       cmd.CommandText = "INSERT INTO payments(pay_name, pay_code, payer_code, pay_sum, pay_date)VALUES(@pay_name, @pay_code, @payer_code, @pay_sum, @pay_date)"; 
       cmd.Parameters.AddWithValue("@pay_name", dataGridView1.Rows[f.RowIndex].Cells["contractnameDataGridViewTextBoxColumn"].Value); 
       cmd.Parameters.AddWithValue("@pay_code", dataGridView1.Rows[f.RowIndex].Cells["contractcodeDataGridViewTextBoxColumn"].Value); 
       cmd.Parameters.AddWithValue("@payer_code", label1.Text); 
       cmd.Parameters.AddWithValue("@pay_sum", dataGridView1.Rows[f.RowIndex].Cells["sumDataGridViewTextBoxColumn"].Value); 
       cmd.Parameters.AddWithValue("@pay_date", label6.Text); 
       cmd.ExecuteNonQuery(); 
       connection.Close(); 
      } 

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

Может быть, он даже не входит в проверку 'if' – Shaharyar

+0

Ну, это может быть, но я здесь потерялся ... Есть ли другой способ для этого? –

+0

Установите «точку прерывания» в строке 'connection.Open()' и проверьте, досталось ли оно туда или нет. Я думаю, что это не – Shaharyar

ответ

0

Я думаю, что вы что-то недопонимание о ООП. Как это так:

ваш метод confirm класс должен также иметь ссылку на datagridview1 (вы создаете пустой datagridview поэтому никогда не выходит даже в петлю foreach)

public void method(DataGridView datagridview1) //remove your first argument, you don't need it anymore 
{ 
    //delete the line "DataGridView dataGridView1 = new DataGridView();" 
    //and keep the rest of the code as it is 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if(row.Cells["paidDataGridViewTextBoxColumn"].Value == true) //it will check every row, and you don't need "DataGridViewCellEventArgs" argument now 
     { 
      try 
      { 
       //your code, it will be same here 
      } 
     } 
} 

для вызова метода:

(используйте один и тот же событие button_click, как вы делали)

private void button2_Click(object sender, EventArgs e) 
{ 
    confirm exec = new confirm();  
    exec.method(datagridview1); //pass "datagridview1" reference 
} 

Он передаст ссылку вашего оригинала datagridview1 на класс confirm.

+0

Извините, я новичок в программировании :) Что я должен поставить вместо« yourfirstargument »? –

+0

Это аргумент события. Когда и где вы называете 'метод'? – Shaharyar

+0

@ user3041437 Я обновил код, надеюсь, вы получите его сейчас – Shaharyar

Смежные вопросы