繁体   English   中英

从Datagridview插入数据的正确方法。 C#MySQL

[英]Insert Data From Datagridview the correct way. c# Mysql

如果我想从datagridview插入MYSQl数据库,它将注入到不同的列而不是正确的列中。

我的桌子看起来像这样:

id | visit_date | visitor_name | visit_address | visit_city | signin_time | 车辆编号| 组织| visit_type | 原因 id_type | person_visit | img | 签出时间

代码如下:

private void confirmAppointmentToolStripMenuItem_Click(object sender, EventArgs e)
{
    string constring = ConfigurationManager.ConnectionStrings["MySQLDatabaseConnection"].ConnectionString;
    using (MySqlConnection con = new MySqlConnection(constring))
    {
        con.Open();
        string sql = "insert into vms_db.final_appointments(visit_date,visitor_name,signin_time,vehicle_number,organization,visit_type,reason,id_type,person_visit,img) values (@visit_date,@visitor_name,@signin_time,@vehicle_number,@organization,@visit_type,@reason,@id_type,@person_visit,@img)";

        using (MySqlCommand cmd = new MySqlCommand(sql, con))
        {
            try
            {
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    cmd.Parameters.AddWithValue("@visit_date", System.DateTime.Now);
                    cmd.Parameters.AddWithValue("@visitor_name", dataGridView1.Rows[i].Cells[2].Value);
                    cmd.Parameters.AddWithValue("@visit_address", dataGridView1.Rows[i].Cells[3].Value);
                    cmd.Parameters.AddWithValue("@visit_city", dataGridView1.Rows[i].Cells[4].Value);
                    cmd.Parameters.AddWithValue("@signin_time", dataGridView1.Rows[i].Cells[5].Value);
                    cmd.Parameters.AddWithValue("@vehicle_number", dataGridView1.Rows[i].Cells[6].Value);
                    cmd.Parameters.AddWithValue("@organization", dataGridView1.Rows[i].Cells[7].Value);
                    cmd.Parameters.AddWithValue("@visit_type", dataGridView1.Rows[i].Cells[8].Value);
                    cmd.Parameters.AddWithValue("@reason", dataGridView1.Rows[i].Cells[9].Value);
                    cmd.Parameters.AddWithValue("@id_type", dataGridView1.Rows[i].Cells[10].Value);
                    cmd.Parameters.AddWithValue("@person_visit", dataGridView1.Rows[i].Cells[11].Value);
                    cmd.Parameters.AddWithValue("@img", dataGridView1.Rows[i].Cells[12].Value);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Final Appointments Reserved, You may Exit Window", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Close();
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

现在,它不会插入正确的列中。 我很着迷,并且由于我想确定自己在做什么,所以我问我是否可以通过这种方式正确地插入数据库:

cmd.Parameters.AddWithValue("@visitor_name", dataGridView1.Rows[i].Cells["visitor_name"].Value);
cmd.Parameters.AddWithValue("@visit_address", dataGridView1.Rows[i].Cells["visit_address"].Value);

您的代码无法正常工作,因为您对所有行使用了相同的命令,但是您连续添加参数而没有在每个循环中清除它们。
在第二行中添加参数或添加具有相同值的许多记录时,这将导致错误。

您可以编写更好的代码,一次定义所有参数,然后仅在循环内更改值。 而且根本不使用AddWithValue

using (MySqlCommand cmd = new MySqlCommand(sql, con))
{
    try
    {
        cmd.Parameters.Add("@visit_date", MySqlDbType.DateTime);
        cmd.Parameters.Add("@visitor_name", MySqlDbType.VarChar);
        .... // add all the other parameters here

        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
        {
            cmd.Parameters["@visit_date"].Value = System.DateTime.Now;

            // You need to be sure about what column contains the 
            // visitor name. Here for example you take the value 
            // from the third column, not from the second one.
            cmd.Parameters["@visitor_name"].Value = dataGridView1.Rows[i].Cells[2].Value;
            ... again set the value at each loop for each parameter
            cmd.ExecuteNonQuery();
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM