2014-01-09 3 views
2

У меня есть datagridview, который я хочу сохранить в базе данных mysql.
I'm возможность вставить первую строку, но после того, что он дает мне ошибкуСохранить datagridview для mysql

«MySql.Data.MySqlCliente.MySqlException (0x80004005): Параметр„@ треска“уже определено) .. ..»

try 
{ 
    string config = "server=localhost; userid = root; database = dbName"; 
    MySqlConnection con = new MySqlConnection(config); 
    string query = "INSERT INTO infoplu(cod,sec,fam,nr) VALUES (@cod,@sec,@fam,@nr)"; 

    MySqlCommand cmd = new MySqlCommand(query, con); 
    con.Open(); 

    for (int row = 0; row < dgExcelData.Rows.Count; row++) 
    {      
     cmd.Parameters.AddWithValue(
      "@cod", dgExcelData.Rows[row].Cells[0].Value.ToString()); 
     cmd.Parameters.AddWithValue(
      "@sec", dgExcelData.Rows[row].Cells[1].Value.ToString()); 
     cmd.Parameters.AddWithValue(
      "@fam", dgExcelData.Rows[row].Cells[2].Value.ToString()); 
     cmd.Parameters.AddWithValue(
      "@nr", dgExcelData.Rows[row].Cells[6].Value.ToString()); 

     cmd.ExecuteNonQuery(); 
     MessageBox.Show("sucess"); 
    } 

    con.Close(); 
} 
catch (MySqlException er) 
{ 
    MessageBox.Show("Error:" + er.ToString()); 
} 

Может кто-нибудь понять эту ошибку? СООБЩЕНИЕ

ответ

1
cmd.Parameters.Clear() 

Это должно быть то, что вам нужно. Ошибка вызвана добавлением уже существующего параметра.

Вызова этого перед добавлением параметров

+0

Отметить как ответ, если это полезно =) – Coops

+0

Отлично, что решить эту проблему .... Вы спасли меня много времени. Спасибо –

0

Поскольку каждый цикл в вашем for заявления, вы пытаетесь добавить года те же самые параметры, которые вы добавили в свой MySqlCommand уже.

В качестве альтернативы вам может потребоваться очистить параметры, используя метод SqlParameterCollection.Clear;

for (int row = 0; row < dgExcelData.Rows.Count; row++) 
{     
    cmd.Parameters.AddWithValue("@cod", dgExcelData.Rows[row].Cells[0].Value.ToString()); 
    cmd.Parameters.AddWithValue("@sec", dgExcelData.Rows[row].Cells[1].Value.ToString()); 
    cmd.Parameters.AddWithValue("@fam", dgExcelData.Rows[row].Cells[2].Value.ToString()); 
    cmd.Parameters.AddWithValue("@nr", dgExcelData.Rows[row].Cells[6].Value.ToString()); 

    cmd.ExecuteNonQuery(); 
    cmd.Parameters.Clear(); 
    MessageBox.Show("sucess"); 
} 

в конце вашего for цикла или, возможно, потребуется создать новый MySqlCommand вершину Вашей for петли, как;

for (int row = 0; row < dgExcelData.Rows.Count; row++) 
{ 
    MySqlCommand cmd = new MySqlCommand(query, con);     
    cmd.Parameters.AddWithValue("@cod", dgExcelData.Rows[row].Cells[0].Value.ToString()); 
    cmd.Parameters.AddWithValue("@sec", dgExcelData.Rows[row].Cells[1].Value.ToString()); 
    cmd.Parameters.AddWithValue("@fam", dgExcelData.Rows[row].Cells[2].Value.ToString()); 
    cmd.Parameters.AddWithValue("@nr", dgExcelData.Rows[row].Cells[6].Value.ToString()); 

    cmd.ExecuteNonQuery(); 
    MessageBox.Show("sucess"); 
} 
+0

Спасибо, я только что решил свою проблему. –

+0

@ user3061846. Вы очень желанны. –

+0

Это еще один способ сделать это, интересно, эффективнее ли это – Coops

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