Как исправить всплывающее окно сообщения дважды и ошибка в ExecuteNonQuery - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть это представление данных, где мне нужно вставить все, что у него есть. Таким образом, у меня есть 2 строки в моем datagridview. Всякий раз, когда я нажимаю кнопку сохранения, он спрашивает меня три раза. И эта ошибка появляется на xcom.ExecuteNonQuery ();

Это ошибка:

Параметризованный запрос '(@id nvarchar (4000), @ idtran nvarchar (4000), @ qty nvarc 'ожидает параметр' @id ', который не был поставлен.

Я проверил базу данных, и она вставляет правильное количество строк из таблицы данных. Я удивляюсь, почему окно с сообщением появляется 3 раза, а затем появляется сообщение об ошибке.

Пожалуйста, помогите мне, я новичок в c # и все еще учусь.

private void button9_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView2.Rows)
            {
                string query = @"INSERT INTO MED (id,idtran,qty,user)
                                            Values(@id,@idtran,@qty,@user)";

                using (SqlConnection xcon = new SqlConnection(@"Server=MEAND;Database=SHC;Integrated Security=SSPI;"))
                {
                    using (SqlCommand xcom = new SqlCommand(query, xcon))
                    {
                        xcon.Open();
                        xcom.CommandType = CommandType.Text;
                        xcom.Parameters.AddWithValue("@id", row.Cells["id"].Value);
                        xcom.Parameters.AddWithValue("@idtran", row.Cells["idtran"].Value);
                        xcom.Parameters.AddWithValue("@qty", row.Cells["qty"].Value);
                        xcom.Parameters.AddWithValue("@user", row.Cells["user"].Value);
                        xcom.ExecuteNonQuery();

                        try
                        {
                            DialogResult result1 = MessageBox.Show("Are you sure you want to save this?",
                            "Important Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                            if (result1 == DialogResult.Yes)
                            {
                                Medi b = new Medi();
                                b.Show();
                                this.Hide();
                            }
                        }

                        catch (Exception)
                        {
                            throw;

                        }
                        finally
                        {
                            xcon.Close();
                        }
                    }
                }
            }
        }

1 Ответ

0 голосов
/ 05 апреля 2019

Примерно так: (я упустил код сообщения для простоты)

        DataGridViewRow row;
        string query = @"INSERT INTO MED (id,idtran,qty,user)
                            Values(@id,@idtran,@qty,@user)";
        using (SqlConnection xcon = new SqlConnection(@"Server=MEAND;Database=SHC;Integrated Security=SSPI;"))
        {
            try
            {
                xcon.Open();
                for (int n=0;n<dataGridView2.Rows.Count-1;n++)
                {
                    row=dataGridView2.Rows[n];
                    using (SqlCommand xcom = new SqlCommand(query, xcon))
                    {
                        xcom.CommandType = CommandType.Text;
                        xcom.Parameters.AddWithValue("@id", row.Cells["id"].Value);
                        xcom.Parameters.AddWithValue("@idtran", row.Cells["idtran"].Value);
                        xcom.Parameters.AddWithValue("@qty", row.Cells["qty"].Value);
                        xcom.Parameters.AddWithValue("@user", row.Cells["user"].Value);
                        xcom.ExecuteNonQuery();xcom.Dispose();
                    }
                }                   
            }
            catch
            {
                //do what you need
            }
            finally
            {
                xcon.Close();
            }
        }

А также рассмотрите этот пост , если у вас будет много строк в вашей сетке данных для проблем производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...