Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
1
.NET 4.x

Запись в access через oledb

04.04.2016, 23:19. Показов 3252. Ответов 17

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, у меня проблема с добавлением данных в базу, ругается на синтаксис, бьюсь уже неделю, вроде все верно
код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 private void button1_Click(object sender, EventArgs e)
        {
 
            try
            {
                connection.Open();
 
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                command.CommandText = "insert into client1 (work) values('" + textBox1.Text + "')";
 
                command.ExecuteNonQuery();
                MessageBox.Show("Успешно записано!");
                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("error  " + ex);
                connection.Close();
            }
        }

Скриншот
Запись в access через oledb
Запись в access через oledb
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2016, 23:19
Ответы с готовыми решениями:

Добавление записей в access через oledb
Достаточно избитый вопрос, но никак не могу разобраться. Почему после успешной вставки записи в...

Подключение к Access через OleDB и вывод результата запроса в textBox
Имеется подключение к Access через OleDB мне необходимо чтобы результат запросы выводился в...

Access ошибка OLEDB 12.0
Написал приложение Виндовс Форм для работы с базой Access (2007), а когда на другой комп перенес то...

Запись в бд access через combobox
Всем привет! Подскажите как можно реализовать ввод значений из combobox в базу данных access? ...

17
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
04.04.2016, 23:33 2
yuran1174,
Какой тип поля work?
И, кстати, слово work включено в список будущих зарезервированных слов языка SQL. Возможно будущее уже наступило, попробуйте заключить имя поля в квадратные скобки, т.е. [work]
1
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
05.04.2016, 00:00  [ТС] 3
тип поля строковый, слоцо work поменял, толку ноль(
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try
            {
                connection.Open();
 
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                command.CommandText = "insert into client1 [работа] values('" + textBox1.Text.ToString() + "')";
 
                command.ExecuteNonQuery();
                MessageBox.Show("Успешно записано!");
                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("error  " + ex);
                connection.Close();
            }


Кликните здесь для просмотра всего текста
Запись в access через oledb
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
05.04.2016, 00:05 4
Так попробуй:
command.CommandText = "insert into client1 ([работа]) values('" + textBox1.Text.ToString() + "')";
1
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.04.2016, 00:14 5
Цитата Сообщение от yuran1174 Посмотреть сообщение
слоцо work поменял, толку ноль(
В смысле поменял? Только в запросе или в таблице БД тоже?
Правильно будет со скобками, как показал iluxa1810, т.е. ([имя поля]).
И, это не ошибка, но метод ToString() к строке нет смысла применять.
1
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
05.04.2016, 00:58  [ТС] 6
iluxa1810, Спасибо )
Даценд,
Цитата Сообщение от Даценд Посмотреть сообщение
но метод ToString() к строке нет смысла применять.
я уже просто не знал что еще поменять ) теперь все заработало ) и да слово в базе тоже поменял))

Добавлено через 15 минут
iluxa1810, Даценд, а теперь такой вопрос) как мне записать данные в ячейку с типом int (числовой ) ?
просто когда я пытаюсь записать в базу то выскакивает такая хрень ) уже не синтаксис
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 try
                {
                    connection.Open();
 
                    OleDbCommand command = new OleDbCommand();
                    command.Connection = connection;
                    int Kid = Int32.Parse(label4.Text);
                    command.CommandText = "insert into client1 ([работа],[стоимость],[Kid],[Дата]) values('" + textBox1.Text.ToString() + "','" + Kid + "','"+maskedTextBox2.Text+"')";
 
                    command.ExecuteNonQuery();
                    MessageBox.Show("Успешно записано!");
                    textBox1.Text = "";
                    maskedTextBox1.Text = "";
                    maskedTextBox2.Text = "";
                    comboBox1.Text = "";
                    connection.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("error  " + ex);
                    connection.Close();
                }

Кликните здесь для просмотра всего текста
Запись в access через oledb
Миниатюры
Запись в access через oledb  
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.04.2016, 01:04 7
Цитата Сообщение от yuran1174 Посмотреть сообщение
как мне записать данные в ячейку с типом int
Точно так же, только без использования одинарных кавычек.
1
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
05.04.2016, 01:09  [ТС] 8
Даценд, не помогает (
0
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
05.04.2016, 01:18  [ТС] 9
Даценд,
Кликните здесь для просмотра всего текста
Вот если что вся программа )
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.04.2016, 01:26 10
yuran1174,
Ну так количество полей и количество значений в запросе разное.
Вот пример, как грамотно оформлять запрос, не думая над кавычками, решетками и ToString'ами:
C#
1
2
3
4
5
6
string commText = "insert into employers (FIO, Phone, BirthDate, Department) values (?, ?, ?, ?)";
OleDbCommand comm = new OleDbCommand(commText, conn);
comm.Parameters.AddWithValue("@fio", tbFIO.Text); //текст
comm.Parameters.AddWithValue("@phone", tbPhone.Text); //текст
comm.Parameters.Add("@birthdate", OleDbType.Date).Value = dtpBirthDate.Value.ToShortDateString(); //дата
comm.Parameters.AddWithValue("@dep", (int)cbDep.SelectedValue); //int
В тексте запроса используются неименованные параметры (?). Вместо ? в окончательный текст запроса будут по порядку помещены значения из списка параметров comm.Parameters.
Под свой запрос подгоните сами.
Добавлю:
tbFIO и tbPhone - TextBox'ы
dtpBirthDate - DateTimePicker, значение из него приводится к строке методом ToShortDateString()
cbDep - ComboBox, выбранное в нем значение приводится к int
1
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
05.04.2016, 19:14  [ТС] 11
Вот такая ошибка вылазиет в таком случае(
Миниатюры
Запись в access через oledb  
0
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
05.04.2016, 20:25  [ТС] 12
Даценд, я правильно понимаю, запрос должен быть в таком виде?
говнокод
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                try
                {
                    connection.Open();
 
                   
 
                    string commText = "insert into clients (работа, стоимость, дата, Kid) values (?, ?, ?, ?)";
                    OleDbCommand comm = new OleDbCommand(commText, connection);
                    comm.Parameters.AddWithValue("@работа", textBox1.Text); //текст
                    comm.Parameters.AddWithValue("@стоимость", maskedTextBox1.Text); //текст
                    comm.Parameters.AddWithValue("@дата", maskedTextBox2.Text); //текст
                    comm.Parameters.AddWithValue("@Kid", (int)comboBox2.SelectedValue); //int
                    comm.ExecuteNonQuery();
                    MessageBox.Show("Успешно записано!");
                    textBox1.Text =  maskedTextBox1.Text =  maskedTextBox2.Text =  comboBox1.Text = "";
                    connection.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("error  " + ex);
                    connection.Close();
                }


Добавлено через 27 минут
Все разобрался )) Спасибо, очень выручил )
0
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
10.04.2016, 20:30  [ТС] 13
Даценд, Здравствуйте) в общем у меня опять проблемы) делаю запрос чтобы при выборе "Жанра" из комбобокс в листбокс записывались "названия" и при выборе одного из значений листбокса данные записывались в лейблы...
вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
            try
            {
                connection.Open();
 
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                string query = "select * from shop where nazv='" + listBox1.SelectedIndex + "'";
                command.CommandText = query;
 
                OleDbDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    label1.Text = reader["id"].ToString();
                    label3.Text = reader["nazv"].ToString();
                    label4.Text = reader["info"].ToString();
                }
                
               
                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("error  " + ex);
                connection.Close();
            }

вся проблема в том что при выборе значения из листбокса ничего никуда не записывается (
скрин если нужен)
Запись в access через oledb
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
10.04.2016, 20:41 14
а так:
C#
1
string query = "select * from shop where nazv='" + listBox1.SelectedItem.ToString() + "'";
1
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
10.04.2016, 21:00  [ТС] 15
Добавлено через 56 секунд
Цитата Сообщение от Даценд Посмотреть сообщение
а так:
)))) спасибо) так работает )

Добавлено через 12 минут
Даценд,А как можно реализовать загрузку/выгрузку изображения из бд?
смотрел тут Вставка и извлечение изображений из БД. не понял ничего )
0
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
11.04.2016, 21:56  [ТС] 16
Даценд,С загрузкой фото я разобрался, как мне сделать изменения в базе?
есть кусок кода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
try
                {
            OleDbCommand command = new OleDbCommand();
                    command.Connection = connection;
                    string query = "UPDATE login_pass SET fname ='"+textBox1.Text+"', sname = '"+textBox2.Text+"', phone='"+textBox3.Text+"' WHERE id = "+label1.Text;
                    command.CommandText = query;
                    connection.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("error  " + ex);
                    connection.Close();
                }

так она не сохраняет изменения) как будет правильно?

Добавлено через 2 минуты
Даценд, Помоги пожалуйста )
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
11.04.2016, 22:00 17
yuran1174,
А где команда на выполнение команды?
Добавьте на 10-ю строку:
C#
10
command.ExecuteNonQuery();
1
3 / 3 / 2
Регистрация: 06.03.2015
Сообщений: 107
11.04.2016, 22:04  [ТС] 18
Даценд, И еще раз спасибо огромное) Что бы я без вас делал)
0
11.04.2016, 22:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 22:04
Помогаю со студенческими работами здесь

Access 2000 + OleDb Аномалия )
Не могу разгодать головоломку. Access + 3 клиента через OleDb. 100% что приложение не удаляет...

Access запрос при OleDb подключении
Привет. Пишет "пропущен оператор". Что не так, помогите люди добрые?) ShowResults("Полная...

Использование System.Data.OleDb: Нужно ли устанавливать Access
Мне необходимо использовать базу данных Access. Для этого пользуюсь классами в пространстве имен...

Найти нужную запись в таблице Access'а через VBA Excel
Народ, никак не получается!!! И как если нашел сделать ее текущей??? Поделитесь куском кода!...

Скомпилировать проект с OleDB, чтобы не требовался установленный пакет OleDB
Добрый день! Возможно ли скомпилировать проект, который работает с базами данных с помощью OleDB,...

Как программно добавить запись в базу данных access через datagridview?
Проблема заключается в следующем: Когда заполняю таблицу с клавиатуры, то данные с datagridview...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru