Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
1

Внесение даты в БД Access через TextBox

14.06.2019, 10:22. Просмотров 320. Ответов 16
Метки нет (Все метки)

Всем привет, у меня такая проблема, вношу данные в базу через textbox, но именно на добавлении даты пишет ошибку "несоответствие типов данных"
мне подсказывают конвертировать вводимые данные в тип дата, но я не знаю как, вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      string query = "INSERT INTO Материалы (Артикул, Название, Цена_за_ед, Дата_поступления, Количество, Поставщик) VALUES (@Артикул, @Название, @Цена_за_ед, @Дата_поступления, @Количество, @Поставщик)";
 
                OleDbCommand command = new OleDbCommand(query, myConnection);
 
                command.Parameters.Add(new OleDbParameter("Артикул", textBox1.Text));
 
                command.Parameters.Add(new OleDbParameter("Название", textBox2.Text));
 
                command.Parameters.Add(new OleDbParameter("Цена_за_ед", textBox3.Text));
 
                command.Parameters.Add(new OleDbParameter("Количество", textBox4.Text));
 
                command.Parameters.Add(new OleDbParameter("Дата_поступления", textBox5.Text));
 
                command.Parameters.Add(new OleDbParameter("Поставщик", comboBox1.Text));
 
                command.ExecuteNonQuery();
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2019, 10:22
Ответы с готовыми решениями:

Ввод массивов через множество textBox, подсчёт суммы, и вывод через listBox. Ошибка при вводе через textBox
Создал я кучу текст боксов, там происходит ввод каждого элемента массива. И вывод через листбокс ...

Внесение данных в Word через форму Access
Здравствуйте, появилась задача в которой необходимо сделать так что бы из формы в Access заполнялся...

внесение даты
Тип данных в столбце DataStart smalldate. Выдает ошибку. AnsiString sCmd ="INSERT INTO Worker...

Внесение даты в БД
Добрый вечер, форумчане. Уже схожу с ума. Как сделать добавление данных в БД через...

Внесение даты в MySQL
Добрый день. Подскажите пожалуйста. Есть таблица в бд CREATE TABLE `NewTable` ( `nomer` ...

16
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
14.06.2019, 11:23 2
Zerap, Вообще в формах существует контрол DateTimePicker, который возвращает DateTime
C#
1
2
3
4
private void DateTimePicker1_ValueChanged(object sender, EventArgs e)
{
     DateTime date = dateTimePicker1.Value;       
}
Из строки в дату можно распарсить так:
C#
1
DateTime date = DateTime.ParseExact("24.05.2006", "dd.MM.yyyy", CultureInfo.InvariantCulture);
0
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
14.06.2019, 13:26  [ТС] 3
через DateTimePicker тоже пишет несоответствие типов данных
простите за тупые вопросы, тут наверняка всё очевидно, просто слегка не шарю, а задание сделать надо и мучаюсь с эти вторые сутки
вот полностью мой код вместе с тем что вы сказали добавить:
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
26
27
28
29
30
31
32
33
34
35
private void button1_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrWhiteSpace(textBox3.Text) &&
                !string.IsNullOrEmpty(textBox4.Text) && !string.IsNullOrWhiteSpace(comboBox1.Text))
            {
                string query = "INSERT INTO Материалы (Артикул, Название, Цена_за_ед, Дата_поступления, Количество, Поставщик) VALUES (@Артикул, @Название, @Цена_за_ед, @Дата_поступления, @Количество, @Поставщик)";
 
                OleDbCommand command = new OleDbCommand(query, myConnection);
 
                command.Parameters.Add(new OleDbParameter("Артикул", textBox1.Text));
 
                command.Parameters.Add(new OleDbParameter("Название", textBox2.Text));
 
                command.Parameters.Add(new OleDbParameter("Цена_за_ед", textBox3.Text));
 
                command.Parameters.Add(new OleDbParameter("Количество", textBox4.Text));
 
                //command.Parameters.Add(new OleDbParameter("Дата_поступления", OleDbType.Date, 0, textBox5.Text));
 
                command.Parameters.Add(new OleDbParameter("Дата_поступления", dateTimePicker1.Value));
 
                command.Parameters.Add(new OleDbParameter("Поставщик", comboBox1.Text));
 
                command.ExecuteNonQuery();
            }
            else
            {
                MessageBox.Show("Поля артикул, цена, дата поступления и поставщик не должны быть пустыми!", "Ошибка добавления", MessageBoxButtons.OK);
            }
        }
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            DateTime date = dateTimePicker1.Value;
 
        }
0
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
14.06.2019, 13:50 4
Zerap, Прикрепите проект вместе с базой к сообщению. Формат даты надо указать для datetimepicker
0
14.06.2019, 13:50
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
14.06.2019, 13:55  [ТС] 5
Вот мой проект
0
Вложения
Тип файла: rar Учет.rar (538.5 Кб, 1 просмотров)
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
14.06.2019, 15:40  [ТС] 6
я сделал вот так, но появилась другая ошибка
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private void button1_Click(object sender, EventArgs e)
        {
            
 
            if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrWhiteSpace(textBox3.Text) &&
                !string.IsNullOrEmpty(textBox4.Text) && !string.IsNullOrWhiteSpace(comboBox1.Text))
            {
                string query = "INSERT INTO Материалы (Артикул, Название, Цена_за_ед, Дата_поступления, Количество, Поставщик) VALUES (@Артикул, @Название, @Цена_за_ед, @Дата_поступления, @Количество, @Поставщик)";
 
                OleDbCommand command = new OleDbCommand(query, myConnection);
 
                command.Parameters.Add(new OleDbParameter("Артикул", textBox1.Text));
 
                command.Parameters.Add(new OleDbParameter("Название", textBox2.Text));
 
                command.Parameters.Add(new OleDbParameter("Цена_за_ед", textBox3.Text));
 
                command.Parameters.Add(new OleDbParameter("Количество", OleDbType.Integer, 0, textBox4.Text));
 
                //command.Parameters.Add(new OleDbParameter("Дата_поступления", OleDbType.Date, 0, textBox5.Text));
 
                command.Parameters.Add(new OleDbParameter("Дата_поступления", dateTimePicker1.CustomFormat));
 
                command.Parameters.Add(new OleDbParameter("Поставщик", comboBox1.Text));
 
                command.ExecuteNonQuery();
            }
            else
            {
                MessageBox.Show("Поля артикул, цена, дата поступления и поставщик не должны быть пустыми!", "Ошибка добавления", MessageBoxButtons.OK);
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            myConnection.Close();
        }
 
        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            dateTimePicker1.CustomFormat = "dd/mm/yyyy";
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
            //dateTimePicker1.Value.ToShortDateString();
        }
а вот ошибка которую он выдает
System.Data.OleDb.OleDbException: "Параметр @Дата_поступления не имеет значения по умолчанию."

помогиите, мне всего то дату надо чтоб добавлялась в базу, база access, формат даты: краткий формат даты. Он либо пишет не соответствует типу данных, либо не имеет значения по умолчанию.
Прошу, напишите что куда вставит из кода а что убрать, вот не смогу продолжить работу не исправив ошибку
0
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
14.06.2019, 18:05 7
Zerap, В студии откройте вашу базу. Проверьте типы данных в полях таблицы. Код приведите к такому виду:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                string query = "INSERT INTO Материалы (Артикул, Название, Цена_за_ед, Дата_поступления, Количество, Поставщик) VALUES (@Артикул, @Название, @Цена_за_ед, @Дата_поступления, @Количество, @Поставщик)";
 
                OleDbCommand command = new OleDbCommand(query, myConnection);
 
                command.Parameters.Add("Артикул", OleDbType.Integer).Value = 1134;
 
                command.Parameters.Add("Название", OleDbType.WChar).Value = "Test";
 
                command.Parameters.Add("Цена_за_ед", OleDbType.Currency).Value = 3.5;
 
                command.Parameters.Add("Дата_поступления", OleDbType.Date).Value = DateTime.Now;
 
                command.Parameters.Add("Количество", OleDbType.Integer).Value = 5;
 
                command.Parameters.Add("Поставщик", OleDbType.WChar).Value = "Test";
 
                command.ExecuteNonQuery();
После знака равно, ваши значения из текстбоксов, разумеется приведенные в соответствие с типом, т.е. для "Артикул" это будет
C#
1
2
 command.Parameters.Add("Артикул", OleDbType.Integer).Value = int.Parse(tetBox1.Text);
//и т.д.
В остальном все нормально. Я проверял ваш проект.
1
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
15.06.2019, 09:31  [ТС] 8
Вот я сделал так, только я походу опять что то не так делаю, ошибку выдает System.FormatException: "Не удалось преобразовать значение параметра из String в Int32."
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                command.Parameters.Add("Артикул", OleDbType.Integer).Value = int.Parse(textBox1.Text);
 
                command.Parameters.Add("Название", OleDbType.WChar).Value = textBox2.Text;
 
                command.Parameters.Add("Цена_за_ед", OleDbType.Currency).Value = Decimal.Parse(textBox3.Text);
 
                command.Parameters.Add("Дата_поступления", OleDbType.Date).Value = DateTime.Now;//Parse(dateTimePicker1.Text);
 
                command.Parameters.Add("Количество", OleDbType.Integer).Value = int.Parse(textBox4.Text);
 
                command.Parameters.Add("Поставщик", OleDbType.Integer).Value = comboBox1.Text;
 
                command.ExecuteNonQuery();
DateTimePicker оставлять же?
C#
1
2
3
4
5
6
        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            dateTimePicker1.CustomFormat = "dd/mm/yyyy";
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
            //dateTimePicker1.Value.ToShortDateString();
        }
0
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
15.06.2019, 10:57 9
Цитата Сообщение от Zerap Посмотреть сообщение
DateTimePicker оставлять же?
Формат не нужен. У вас ошибка в поле поставщик.
C#
1
2
3
4
//поставщик
command.Parameters.Add("Поставщик", OleDbType.WChar).Value = comboBox1.SelectedValue.ToString();
//дата
command.Parameters.Add("Дата_поступления", OleDbType.Date).Value = dateTimePicker1.Value;
1
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
15.06.2019, 11:48  [ТС] 10
Ошибка не убралась

А, всё, понял. Спасибо, огромное, вообще выручили)))

вот только, если не сложно, после перезапуска программы у меня эта запись не сохраняется, не знаю почему, вот например добавление Нового материала, запись сохраняется.
0
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
15.06.2019, 14:01 11
Цитата Сообщение от Zerap Посмотреть сообщение
после перезапуска программы у меня эта запись не сохраняется
Файл базы нужно положить в выходной каталог, т.е. файл проекта/Bin/Debug и в "Обозревателе решений" кликнув на файле базы в свойствах выставить для "Копировать в выходной каталог" - "Не копировать". А то у вас при каждой сборке файл перезаписывается. Рекомендую всё-таки поставить Access раз уж с ним работаете, и смотреть что у вас там в базе.
1
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
15.06.2019, 20:19  [ТС] 12
Можешь еще подсказать, если не трудно?
Пытаюсь сделать запрос на изменение по полю Код..., но он просто ничего не делает после нажатия на кнопку, но сообщение выводит что изменил запись.
Код проверяю, весь правильный вроде
Вот сам код, но наверно так будет не понятно, скину на всякий случай весь проект. Форма изменения называется Postupde, а при работе приложения путь к ней: Файл/Таблицы/Поставщики либо Добавить/Материал/Поставщики
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void button1_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrWhiteSpace(textBox2.Text))
            {
                string query = "UPDATE Поставщик SET Поставщик = @Поставщик WHERE Код_поставщика = @Код_поставщика";
 
                OleDbCommand command = new OleDbCommand(query, myConnection);
 
                command.Parameters.Add(new OleDbParameter("Код_поставщика", textBox1.Text));
 
                command.Parameters.Add("Поставщик", OleDbType.WChar).Value = textBox2.Text;
 
                command.ExecuteNonQuery();
 
                MessageBox.Show("Запись изменена", "Изменение", MessageBoxButtons.OK);
 
            }
            else
            {
                MessageBox.Show("Поля не должны быть пустыми", "Ошибка добавления", MessageBoxButtons.OK);
            }
        }
Заранее спасибо, очень выручаешь)
0
Вложения
Тип файла: rar Учет.rar (709.2 Кб, 1 просмотров)
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
15.06.2019, 21:13 13
Zerap, С чего вы взяли, что если он выводит сообщение, то это что-то должно значить ?
C#
1
2
3
command.ExecuteNonQuery(); //Возвращает количество затронутых строк, т.е.
var result = command.ExecuteNonQuery(); 
MessageBox.Show(result.ToString()); //1 - изменилась одна строка 0 - ничего не поменялось.
Параметры передавайте в том же порядке, что и в запросе. Сначала "Поставщик" потом "Код поставщика"
0
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
Вчера, 11:24  [ТС] 14
Спасибо, помогло)

Добавлено через 1 час 27 минут
Здравствуйте снова. Можете подсказать, как сделать так, что бы когда я вношу изменение, если я не заполнил некоторые текстбоксы то они при выполнении не опустошали поля в базе к которым они привязаны?
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
26
27
28
29
30
if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrWhiteSpace(textBox2.Text) || !string.IsNullOrWhiteSpace(textBox3.Text)
                 || !string.IsNullOrWhiteSpace(textBox4.Text) || !string.IsNullOrWhiteSpace(textBox5.Text))
            {
                string query = "UPDATE Артикул_материалов SET Название = @Название, Тип = @Тип, Ед_измерения = @Ед_измерения, Характеристика = @Характеристика WHERE Артикул = @Артикул";
 
                OleDbCommand command = new OleDbCommand(query, myConnection);
 
                command.Parameters.Add("Название", OleDbType.WChar).Value = textBox2.Text;
 
                command.Parameters.Add("Тип", OleDbType.WChar).Value = textBox3.Text;
 
                command.Parameters.Add("Ед_измерения", OleDbType.WChar).Value = textBox4.Text;
 
                command.Parameters.Add("Характеристика", OleDbType.WChar).Value = textBox5.Text;
 
                command.Parameters.Add(new OleDbParameter("Артикул", textBox1.Text));
 
                command.ExecuteNonQuery();
 
                var result = command.ExecuteNonQuery();
 
                //MessageBox.Show(result.ToString()); //1 - изменилась одна строка 0 - ничего не поменялось.
 
                MessageBox.Show("Запись изменена", "Изменение", MessageBoxButtons.OK);
 
            }
            else
            {
                MessageBox.Show("Хотя бы одно значение должно быть заполнено!", "Ошибка изменения", MessageBoxButtons.OK);
            }
0
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
Вчера, 11:34 15
Zerap, Ну вы же проверяете их на пустоту, в чем проблема ?
0
Zerap
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 12
Вчера, 16:55  [ТС] 16
Проверять то проверяет. Я имею ввиду, надо мне например только одно название изменить, другие я не заполняю, а когда я выполняю, то он меняет название и меняет остальное пустыми клетками если я не заполнил остальные. Мне надо чтобы он ничего не менял если некоторые поля пустые.

Добавлено через 4 минуты
А и ещё, можете помочь с автоматическим обновлением данных в datagridview, или автоматическое обновление каждые несколько секунд, что бы не перезапускать форму чтобы увидеть изменения. Пытаюсь найти, но ничего из этого не получается, немного не понимаю как под своё подогнать.
0
PoPsa85
750 / 514 / 222
Регистрация: 01.07.2018
Сообщений: 1,723
Вчера, 20:01 17
Цитата Сообщение от Zerap Посмотреть сообщение
Мне надо чтобы он ничего не менял если некоторые поля пустые.
может вы уже сами начнете думать и поиском пользоваться.
Цитата Сообщение от Zerap Посмотреть сообщение
можете помочь с автоматическим обновлением данных в datagridview
Вам для этого половину проекта переписать нужно.
0
Вчера, 20:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
Вчера, 20:01

Формат даты в запросах MS Access к БД Informix через ODBC
Имеется БД Informix и ODBC-драйвер к ней. MS Access успешно подключается к БД, открывает все...

Поиск в базе Access через textBox
Подскажите как осуществить поиск в базе через textBox. Т.е. допустим есть таблица "Товары", в поле...

Внесение даты в базу данных
В программе происходит ввод даты, после чего необходимо внести её в базу данных. Код: string...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru