[英]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.