Рейтинг:
14
Maciej Los
Прежде всего, все заметки о SqlInjection
это очень важно! Поэтому, пожалуйста, прочтите об этом, прежде чем вы начнете что-либо делать.
Вместо такого утверждения:
command.CommandText = "insert into tblcustomer where customername='" + txt_customername.Text + "' and Name='" + txt_Name.Text + "' and Surname='" + txt_Surname.Text + "'";
вы должны использовать параметризованный запрос:
command.CommandText = "INSERT INTO tblcustomer (customername, Name, Surname)
VALUES(@custname, @name, @surname)";
command.Parameters.AddWithValue("@custname", txt_customername.Text);
command.Parameters.AddWithValue("@name", txt_Name.Text);
command.Parameters.AddWithValue("@surname", txt_Surname.Text);
Для получения более подробной информации, пожалуйста, смотрите:
OleDbParameterCollection.Метод AddWithValue (Строка, Объект) (System.Data.Для oledb)[
^]
Najamdohad
команда.Метод executenonquery();
эта проблема-шоу
Najamdohad
Сэр, я набираю ваш весь код одинаково, а затем запускаю свою форму, так что ошибка приходит в строку 53 (команда.Метод executenonquery();
показать ошибку
(Ошибка системы.недопустимое исключение операции. executenonquery требует открытого и доступного соединения.
состояние токов соединения замкнуто.
в системе.данных.olebd.oledb подключение.checkstateopen(stringmethod)
в системе.данных.olebd.oledb подключение.checkstateopen(stringmethod)
в системе.данных.olebd.oledb подключение.checkstateopen(stringmethod)
в системе.данных.olebd.команда oledb для.exeutenonquery()
на кровь.Form3.btn_save_click(отправитель объекта,Eventargs e) в
c:\users\Najam\documents\visual studio 2015\project\blood\blood\form3.cs:line53)
Maciej Los
Кажется, что ваше соединение закрыто или недоступно. Какая у вас строка подключения?
Это должно выглядеть так: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;
Persist Security Info=False;
Как вы создаете соединение?
Я предлагаю использовать заявление как:
using (OleDbConnection connection = new OleDbConnection(sConStr))
{
connection.Open();
//here the code responsible for command creation and execution
}<pre>
Najamdohad
Да сэр у меня есть такой же код для подключения
OleDbConnection connection = новый OleDbConnection();
соединение.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = D:\MASTER\MASTERBLOOD.mdb;
Persist Security Info = False; ";
Maciej Los
Защищен ли ваш файл базы данных паролем или нет?
Если это так, то вам придется использовать другую строку подключения:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MASTER\MASTERBLOOD.mdb;
Jet OLEDB:Database Password=YourPassword;
Рейтинг:
1
Patrice T
command.CommandText = "insert into tblcustomer where customername='" + txt_customername.Text + "' and Name='" + txt_Name.Text + "' and Surname='" + txt_Surname.Text + "'";
Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[
^]
SQL-инъекция[
^]
Атаки SQL-инъекций на примере[
^]
PHP: SQL-инъекция - руководство пользователя[
^]
Шпаргалка по предотвращению инъекций SQL - OWASP[
^]
Рейтинг:
1
Member 14973994
частная btn_add_Click недействительным(объект отправителя, EventArgs в электронной)
{
string sqlQuery = "вставить в tblinventory(`product_code`,`product_name`,`price`,`category`,`stock`) значения (?,?,?,?,?)";
используя (oledbconnection для соед = новый объект oledbconnection(@"поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=БД.# то # "))
используя (объект oledbcommand команду cmd = новый объект oledbcommand(SQL-запрос, соед))
{
if ((txtproductcode.Text == "") || (txtproductname.Text == "") || (txtprice.Text == "") || (txtcategory.Text == "") || (txtquantity.Текст == ""))
{
Ящик для сообщений.Показать("пожалуйста, заполните все поля!");
}
еще {
Коннектикут.Открыть();
cmd.параметры.AddWithValue ("@product_code", txtproductcode.Текст);
cmd.параметры.AddWithValue("@product_name", txtproductname.Текст);
cmd.параметры.AddWithValue ("@price", txtprice.Текст);
cmd.параметры.AddWithValue ("@category", txtcategory.Text);
cmd.параметры.AddWithValue ("@stock", txtquantity.Текст);
Ящик для сообщений.Показать("Успешно Добавлено!");
txtproductcode.Четкий();
txtproductname.Четкий();
txtprice.Четкий();
txtquantity.Четкий();
txtcategory.ResetText();
УМК.Метод executenonquery();
}
}
}
CHill60
Раскомментированный, неформатированный дамп кода-это не очень хорошее решение, и на этот вопрос был дан адекватный ответ более 2 лет назад. Придерживайтесь ответов на недавние вопросы, где ОП все еще нуждается в помощи