Najamdohad Ответов: 4

Как сохранить данные в ms access с помощью C#


connection.Open();
               OleDbCommand command = new OleDbCommand();
               command.Connection = connection;
               command.CommandText = "insert into tblcustomer where customername='" + txt_customername.Text + "' and Name='" + txt_Name.Text + "' and Surname='" + txt_Surname.Text + "'";

               command.ExecuteNonQuery();
               MessageBox.Show("Data Saved");
               connection.Close();


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

у меня есть добавить новые данные, но он не сохраняет мою таблицу доступа, поэтому, пожалуйста, помогите мне

4 Ответов

Рейтинг:
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();

эта проблема-шоу

Maciej Los

?

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[^]


Maciej Los

5ed!

Patrice T

Спасибо

Рейтинг:
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 лет назад. Придерживайтесь ответов на недавние вопросы, где ОП все еще нуждается в помощи

Рейтинг:
0

Richard MacCutchan

Вы уверены, что вам нужен WHERE клаузула о том, что INSERT заявление? Кроме того, не используйте конкатенацию строк для построения SQL-команд, это может привести к потере ваших данных; см. bobby-tables.com: руководство по предотвращению SQL-инъекций[^].

Кроме того, не показывайте сообщения типа "сохраненные данные", когда вы не проверяете результаты ваших SQL-команд.


Maciej Los

Хорошая мысль!