Member 12735615 Ответов: 1

Неправильно вводит данные в столбцы параметров


Если я хочу вставить из datagridview в базу данных MYSQl, он вводит в разные столбцы вместо правильных кулонов

Код выглядит так :

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


Я что-то упустил , мои таблицы столбцов базы данных выглядят так

id | visit_date | visitor_name | visit_address | visit_city | signin_time | vehicle_number | organization | visit_type | reason | id_type | person_visit | img | signout_time


Что я уже пробовал:

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

[no name]

Попробуйте обратиться к столбцам по имени, см., например, здесь: Объект datagridviewcell.ColumnIndex-Eigenschaft (Система.Окна.Формы)[^]

И гораздо лучше получить значения из базового набора данных, если они доступны

Richard Deeming

Не должно ли это окно сообщения и Close вызов снаружи из for петля?

И вам нужно будет очистить коллекцию параметров после каждого ExecuteNonQuery вызов.

1 Ответов

Рейтинг:
0

A_Griffin

В MySQL вам нужно добавить параметры в том же порядке, в каком соответствующие им поля появляются в SQL-операторе.

Порядок, в котором они определены в базе данных, не имеет значения.

Кроме того, обратите внимание на замечание Ричарда Диминга: вам нужно очистить коллекцию параметров в каждом цикле:

cmd.Parameters.Clear