Заполните текстовое поле увеличенным значением из базы данных access в C#
Привет,
Я создал приложение на языке C # для запроса и вставки базы данных продуктов. Однако я здесь с небольшим сомнением, и если кто-нибудь может мне помочь, я сразу же благодарю вас.
Ниже приводится следующее:
У меня есть форма для вставки данных в базу данных, созданную в MS Access 2007, со значениями ссылки, номера продажи, кода клиента, имени клиента, количества и номера позиции в архиве;
Как я могу сделать так, чтобы вместо ручного ввода номера позиции в архиве в текстовое поле он мог быть автоматически заполнен новой позицией в архиве? Например, мой последний вставленный продукт имеет позицию 50 в архиве, новый автоматически будет иметь номер 51 и так далее ... и этот номер должен автоматически появиться в текстовом поле, чтобы пользователь знал, каков номер нового зарегистрированного продукта.
Спасибо,
Что я уже пробовал:
Вот мой код до настоящего момента:
private void btn_save_Click(object sender, EventArgs e) { OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=product.accdb"); OleDbCommand check_sn = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([sn] = @sn)", con); OleDbCommand check_reference = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([reference] = @ref)", con); OleDbCommand check_number = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([number] = @num)", con); con.Open(); check_reference.Parameters.AddWithValue("@ref", textBox_ref.Text); check_sn.Parameters.AddWithValue("@sn", textBox_sn.Text); check_number.Parameters.AddWithValue("@num", textBox_num.Text); int refExist = (int)check_reference.ExecuteScalar(); int SNExist = (int)check_sn.ExecuteScalar(); int numExist = (int)check_number.ExecuteScalar(); if (refExist > 0) { MessageBox.Show("A product with this reference already exists....!"); } else if (SNExist> 0) { MessageBox.Show("A product with this sale number already exists....!"); } else if (numExist > 0) { MessageBox.Show("A product with this archive number already exists....!"); } else { try { String reference = textBox_ref.Text.ToString(); String sn = textBox_ov.Text.ToString(); String cod_client = textBox_cod.Text.ToString(); String client = textBox_cliente.Text.ToString(); String qtd = textBox_qtd.Text.ToString(); String number = textBox_num.Text.ToString(); //This will be the incremented number String my_querry = "INSERT INTO product(reference,sn,cod_client,client,qtd,number)VALUES('" + reference + "','" + sn + "','" + cod_client + "','" + client + "','" + qtd + "','" + number + "')"; OleDbCommand cmd = new OleDbCommand(my_querry, con); cmd.ExecuteNonQuery(); MessageBox.Show("Data saved successfully...!"); } catch (Exception ex) { MessageBox.Show("Failed due to" + ex.Message); } finally { con.Close(); } cleanTextBoxes(this.Controls); } } private void search_btn_Click(object sender, EventArgs e) { Form search = new Form_search(); search.Show(); this.Hide(); } }
Richard Deeming
Используется ли база данных только одним человеком одновременно?
Если нет, то значение, которое вы показываете, вероятно, будет неверным.
Richard Deeming
Также:
String my_querry = "INSERT INTO product(reference,sn,cod_client,client,qtd,number)VALUES('" + reference + "','" + sn + "','" + cod_client + "','" + client + "','" + qtd + "','" + number + "')";
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]