Подключение к базе данных и вставка данных в таблицу

#c#

#c#

Вопрос:

Я пытаюсь подключиться к базе данных и вставить данные в уже существующую таблицу. Кажется, я могу подключиться к базе данных, но у меня возникли проблемы с получением данных для вставки в таблицу. Как мне вставить данные в базу данных в Visual Studio?

Я уже научился передавать параметры и пытался это сделать, но когда я запускаю программу, я все равно получаю исключения. Я приложил скриншот ошибки при попытке добавить новую запись. Я просмотрел несколько разных синтаксисов для оператора insert, но не уверен, что я делаю неправильно. Ниже я включил три скриншота, один из которых — сама форма, ошибка, которую я получаю, а внизу — структура таблицы. Вставить исключение

Форма

 private void btnAccept_Click(object sender, EventArgs e)
{
    if (IsValidData())
    {
        if (addProduct)
        {
            product = new Product();
            this.PutProductData(product);

            try
            {
                SqlConnection sqlConn = new SqlConnection("Data Source= (LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MMABooks.mdf;Integrated Security=True");
                SqlCommand sqlComm = new SqlCommand();
                sqlComm = sqlConn.CreateCommand();
                sqlComm.CommandText = @"INSERT INTO Products (paramColum) VALUES
                                      (@ProductCode, @Description,
                                       @UnitPrice, @OnHandQuantity)";
                sqlComm.Parameters.Add("@ProductCode", SqlDbType.VarChar);
                sqlComm.Parameters.Add("@Description", SqlDbType.VarChar);
                sqlComm.Parameters.Add("@UnitPrice", SqlDbType.VarChar);
                sqlComm.Parameters.Add("@OnHandQuantity", SqlDbType.VarChar);
                sqlConn.Open();
                sqlComm.ExecuteNonQuery();
                sqlConn.Close();

                // Add code here to call the AddProduct method of the ProductDB class.
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ex.GetType().ToString());
            }
        }
    }
}

private void btnAdd_Click(object sender, EventArgs e)
{
    frmAddModifyProduct addProductForm = new 
    frmAddModifyProduct();
    addProductForm.addProduct = true;
    DialogResult result = addProductForm.ShowDialog();

    if (result == DialogResult.OK)
    {
        product = addProductForm.product;
        txtCode.Text = product.Code;
        this.DisplayProduct();
    }
}
 

Он должен ввести запись в таблицу Продуктов. Если я запишу это для инструкции insert, я разберусь с извлечением, обновлением и удалением.

Структура таблицы

Комментарии:

1. Ваша ВСТАВКА В столбцы не соответствует вашему предложению VALUES. ВСТАВКА В продукты (paramColumn) должна быть ВСТАВЛЕНА В продукты (ProductCode, Description, UnitPrice, OnHandQuantity)

2. @MaxSzczurek ах, пропустил это, да, это тоже нужно исправить, вы не возражаете, если я добавлю это к ответу?

3. @peeyushsingh Вам не нужно запрашивать разрешение, чтобы сделать ваш ответ правильным.

4. Я отредактировал код в вашем вопросе в соответствии с обычными соглашениями C #. Пожалуйста, помните, что при задании вопроса здесь важна удобочитаемость вашего кода, поэтому потратьте некоторое время на его правильное форматирование, как это сделал я. Кроме того, включите сведения об ошибке в свой вопрос в виде текста , а не в виде изображения ошибки. Изображения должны быть дополнительными, но они не должны быть необходимы для получения важных деталей.

5. @peeyushsingh Пожалуйста, сделайте!

Ответ №1:

Вам нужно добавить значения параметров, что-то вроде:

 command.Parameters.Add("@LastName", SqlDbType.VarChar, 30).Value = "Smith";
command.Parameters.Add("@GenderCode", SqlDbType.Char, 1).Value = "M";.
 

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

 cmd.Parameters.AddWithValue("@ProductCode", product.Code);
cmd.Parameters.AddWithValue("@Description", product.Description);
 

В текущем коде вы только что настроили параметры, но не передали значение.

РЕДАКТИРОВАТЬ: на основе комментариев @MaxSzczurek выше

Ваша ВСТАВКА В столбцы не соответствует вашему предложению VALUES.

INSERT INTO Products (paramColumn) должно быть изменено на:

 INSERT INTO Products(ProductCode, Description, UnitPrice, OnHandQuantity)
 

Комментарии:

1. Пожалуйста, не рекламируйте использование AddWithValue() , это зло . 😉

2. @stickybit спасибо, совсем не знал об этом! жизнь под скалой!!

3. Это очень помогло! Я исправил параметры и инструкцию insert, но теперь я получаю ошибку ограничения первичного ключа: (

4. первичные ключи @Triptonix используются для обеспечения уникальной идентификации строк, ваш код продукта является первичным ключом, вы должны вставлять две строки с одинаковым кодом продукта

5. значением вашего параметра будет значение, введенное пользователем, или переменная, имеющая введенное пользователем значение