【问题标题】:Save datagridview to mysql将datagridview保存到mysql
【发布时间】:2023-03-23 13:23:01
【问题描述】:

我有一个 datagridview 我想保存到 mysql 数据库中。
我可以插入第一行,但之后它给了我一个错误

"MySql.Data.MySqlCliente.MySqlException (0x80004005):参数'@cod'已经被定义)...."

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());
}

谁能理解这个错误? 谢谢

【问题讨论】:

    标签: c# mysql datagridview


    【解决方案1】:
    cmd.Parameters.Clear()
    

    这应该是你需要的。错误是添加了一个已经存在的参数造成的。

    在添加参数之前调用它

    【讨论】:

    • 如果有帮助就标记为答案 =)
    【解决方案2】:

    因为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 循环的末尾,或者您可能需要在for 循环的顶部创建新的MySqlCommand,例如;

    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");
    }
    

    【讨论】:

    • 这是另一种方式,不知道是不是效率更高
    • @CodeBlend 我不知道。我从不测量它。 其实,我不在乎。使用Clear() 似乎更清楚。
    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 2017-08-20
    • 2013-08-03
    • 2012-03-19
    • 2016-06-11
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多