简体   繁体   English

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

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

If i want to insert from datagridview into MYSQl Database, it injects into different columns instead of the correct columns. 如果我想从datagridview插入MYSQl数据库,它将注入到不同的列而不是正确的列中。

My table looks like this : 我的桌子看起来像这样:

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

Code looks like this : 代码如下:

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

Now it doesn't insert into the correct columns. 现在,它不会插入正确的列中。 I got tempted, and since I want to be sure of what I am doing, I am asking if I can correctly insert into the database via this means : 我很着迷,并且由于我想确定自己在做什么,所以我问我是否可以通过这种方式正确地插入数据库:

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

Your code cannot work correctly because you use the same command for all rows but you continuosly add parameters without clearing them at each loop. 您的代码无法正常工作,因为您对所有行使用了相同的命令,但是您连续添加参数而没有在每个循环中清除它们。
This will result in errors while adding the parameters in the second row or many records added with the same value. 在第二行中添加参数或添加具有相同值的许多记录时,这将导致错误。

You can write a better code defining the parameter once for all and then just changing the value inside the loop. 您可以编写更好的代码,一次定义所有参数,然后仅在循环内更改值。 And not use AddWithValue at all 而且根本不使用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