2014-01-09 46 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