0 / 0 / 0
Регистрация: 18.03.2017
Сообщений: 85

Внесение даты в БД

10.05.2017, 19:42. Показов 17565. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, форумчане. Уже схожу с ума. Как сделать добавление данных в БД через monthCalendar(если есть альтернативный способ, то можно и им)? Так же эта дата должна быть сегодняшнего дня( например сегодня дата 10.05.2017, то и вноситься эта дата). Поле для даты Дата регистрации ( второй запрос на внос данных).
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\ффф\documents\visual studio 2015\Projects\Учет библиотечных фондов\Учет библиотечных фондов\LibraryBase.mdf;Integrated Security=True;");
                String str = "insert into [Читатели] (Фамилия, Имя, Отчество, Телефон, Адрес) values ('" + textBox4.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox5.Text + "')";
                String stir = "insert into [Данные для входа] (Логин, Пароль, Дата регистрации) values ('" + textBox3.Text + "','" + textBox2.Text + "','" + monthCalendar1 +"')";
                con.Open();
                SqlCommand cmd = new SqlCommand(str, con);
                cmd.ExecuteNonQuery();
                con.Close();
                con.Open();
                SqlCommand fgc = new SqlCommand(stir, con);
                fgc.ExecuteNonQuery();
                con.Close();
                Form4 fpg = new Form4();
                this.Hide();
                fpg.ShowDialog();
                this.Show();
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.05.2017, 19:42
Ответы с готовыми решениями:

Внесение даты в базу данных
В программе происходит ввод даты, после чего необходимо внести её в базу данных. Код: string sql = @"UPDATE SET date_reg =...

Внесение даты в БД Access через TextBox
Всем привет, у меня такая проблема, вношу данные в базу через textbox, но именно на добавлении даты пишет ошибку "несоответствие типов...

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

11
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,839
Записей в блоге: 1
10.05.2017, 21:39
Sibya, сформулируй точнее задание - какая дата все-таки должна вноситься в БД: выбранная в MonthCalendar или текущая?
1
0 / 0 / 0
Регистрация: 18.03.2017
Сообщений: 85
10.05.2017, 22:06  [ТС]
Прошу прощения. Просто хотелось бы узнать и тот и то вариант.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,839
Записей в блоге: 1
10.05.2017, 23:29
Лучший ответ Сообщение было отмечено Sibya как решение

Решение

Sibya, ок. В любом случае нужно сначала получить дату и далее использовать в запросе.
C#
1
2
3
4
5
// Текущая
DateTime registrationDate = DateTime.Now;
 
// Выбранная в MonthCalendar. Предполагается что MaxSelectionCount=1
DateTime registrationDate = monthCalendar1.SelectionStart;
Вставку делаем так (обрати внимание на использование параметров):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DateTime registrationDate = ...;
 
using (var con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\ффф\documents\visual studio 2015\Projects\Учет библиотечных фондов\Учет библиотечных фондов\LibraryBase.mdf;Integrated Security=True;"))
{
        string sql = "insert into [Читатели] (Фамилия, Имя, Отчество, Телефон, Адрес) values (@Фамилия, @Имя, @Отчество, @Телефон, @Адрес);\r\n"
                + "insert into [Данные для входа] (Логин, Пароль, Дата регистрации) values (@Логин, @Пароль, @ДатаРегистрации)";
        SqlCommand cmd = new SqlCommand(sql, con);
        // Читатели
        cmd.Parameters.AddWithValue("@Фамилия", textBox4.Text);
        cmd.Parameters.AddWithValue("@Имя", textBox6.Text);
        cmd.Parameters.AddWithValue("@Отчество", textBox7.Text);
        cmd.Parameters.AddWithValue("@Телефон", textBox8.Text);
        cmd.Parameters.AddWithValue("@Адрес", textBox5.Text);
        // Данные для входа
        cmd.Parameters.AddWithValue("@Логин", textBox3.Text);
        cmd.Parameters.AddWithValue("@Пароль", textBox2.Text);
        cmd.Parameters.AddWithValue("@ДатаРегистрации", registrationDate);
 
        con.Open();
        cmd.ExecuteNonQuery();
}
P.S. Очень советую немедленно переименовать элементы управления так чтобы было понятно за что он отвечает. Потому что через неделю ты не вспомнишь что textBox3 это логин. Гораздо лучше если он будет называться textBoxLogin.
1
0 / 0 / 0
Регистрация: 18.03.2017
Сообщений: 85
11.05.2017, 00:47  [ТС]
Спасибо огромное! Я очень сильно благодарен! Есть еще вопрос. Эти две таблицы связанны полем "Номер читательского билета", которое является внешним полем в таблице Данные для входа и Первичным в таблице Читатели. Оно оно само заполняется или заполнение нужно обозначить в коде?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,839
Записей в блоге: 1
11.05.2017, 01:27
Sibya, это нужно делать кодом. Проще всего будет написать хранимую процедуру на SQL которая сделает два INSERT'a и вызывать её из C#.
1
0 / 0 / 0
Регистрация: 18.03.2017
Сообщений: 85
11.05.2017, 20:06  [ТС]
Тесть нужно написать хранимую процедуру на добавление данных в таблицу Данные для входа?
И как я понял код процедуры должен выглядеть так.
T-SQL
1
2
3
4
5
6
7
8
ALTER PROCEDURE [dbo].[Внос данных]
    @НомерЧитательскогоБилета int 
AS
BEGIN
    SET NOCOUNT ON;
        INSERT INTO dbo.Данные для входа
    values (@НомерЧитательскогобилета)
END
И как ее вызвать в коде C#?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,839
Записей в блоге: 1
11.05.2017, 20:37
Sibya, нужно написать хранимую процедуру для вставки в обе таблицы сразу. Например так: (убедись что типа параметров соответствуют типам колонок и вместо ? подставь их настоящую длину)
хранимая процедура
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE PROC InsertReader
    @Фамилия         varchar(?),
    @Имя             varchar(?),
    @Отчество        varchar(?),
    @Телефон         varchar(?),
    @Адрес           varchar(?),
    @Логин           varchar(?),
    @Пароль          varchar(?),
    @ДатаРегистрации datetime
AS
SET XACT_ABORT ON 
 
BEGIN TRAN
 
    INSERT INTO [Читатели] (Фамилия, Имя, Отчество, Телефон, Адрес)
        VALUES (@Фамилия, @Имя, @Отчество, @Телефон, @Адрес)
 
    DECLARE @НомерЧитательскогоБилета int
    SET @НомерЧитательскогоБилета = CAST(SCOPE_IDENTITY() AS int)
 
    INSERT INTO [Данные для входа] (Логин, Пароль, Дата регистрации, [Номер читательского билета])
        VALUES (@Логин, @Пароль, @ДатаРегистрации, @НомерЧитательскогоБилета)
 
COMMIT TRAN

Вызов процедуры:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DateTime registrationDate = ...;
 
using (var con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\ффф\documents\visual studio 2015\Projects\Учет библиотечных фондов\Учет библиотечных фондов\LibraryBase.mdf;Integrated Security=True;"))
{
        SqlCommand cmd = new SqlCommand("InsertReader", con);
        cmd.CommandType = CommandType.StoredProcedure;
        // Читатели
        cmd.Parameters.AddWithValue("@Фамилия", textBox4.Text);
        cmd.Parameters.AddWithValue("@Имя", textBox6.Text);
        cmd.Parameters.AddWithValue("@Отчество", textBox7.Text);
        cmd.Parameters.AddWithValue("@Телефон", textBox8.Text);
        cmd.Parameters.AddWithValue("@Адрес", textBox5.Text);
        // Данные для входа
        cmd.Parameters.AddWithValue("@Логин", textBox3.Text);
        cmd.Parameters.AddWithValue("@Пароль", textBox2.Text);
        cmd.Parameters.AddWithValue("@ДатаРегистрации", registrationDate);
 
        con.Open();
        cmd.ExecuteNonQuery();
}

Обрати внимание как мало изменилось в коде благодаря использованию параметров.

P.S. Названия таблиц и колонок на русском языке считаются моветоном. Лучше называть их на английском.
1
0 / 0 / 0
Регистрация: 18.03.2017
Сообщений: 85
12.05.2017, 00:05  [ТС]
Все данные вводятся, кроме поля Номер читательского билета в таблице Данные для входа. Если добавить null, то не заполняются, а если убрать, то ошибка
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,839
Записей в блоге: 1
12.05.2017, 16:11
Sibya, что значит "не вводятся"? Что именно происходит при вызове ХП InsertReader? [Читатели].[Колонка Номер читательского билета] это IDENTITY колонка?

Цитата Сообщение от Sibya Посмотреть сообщение
Если добавить null, то не заполняются, а если убрать, то ошибка
Где ты это делаешь?
1
0 / 0 / 0
Регистрация: 18.03.2017
Сообщений: 85
12.05.2017, 17:46  [ТС]
При вызове процедуры все данные вносятся, кроме поля Номер читательского билета. Насколько я понял, то нет. Вот скрипты этих двух таблиц.
T-SQL
1
2
3
4
5
6
7
8
9
CREATE TABLE [dbo].[Читатели] (
    [НомерЧитательскогоБилета] INT           DEFAULT (NEXT VALUE FOR [dbo].[Читатели_НомерЧитательскогоБилета_Sequence_1]) NOT NULL,
    [Фамилия]                  VARCHAR (255) NULL,
    [Имя]                      VARCHAR (255) NULL,
    [Отчество]                 VARCHAR (255) NULL,
    [Телефон]                  VARCHAR (255) NULL,
    [Адрес]                    VARCHAR (255) NULL,
    CONSTRAINT [Читатели_PK] PRIMARY KEY NONCLUSTERED ([НомерЧитательскогоБилета] ASC)
);
T-SQL
1
2
3
4
5
6
7
8
9
CREATE TABLE [dbo].[Данные для входа] (
    [НомерАккаунта]            INT           DEFAULT (NEXT VALUE FOR [dbo].[Данные для входа_НомерАккаунта_Sequence_1]) NOT NULL,
    [Логин]                    VARCHAR (255) NULL,
    [Пароль]                   VARCHAR (255) NULL,
    [НомерЧитательскогоБилета] INT           DEFAULT (NEXT VALUE FOR [dbo].[Читатели_НомерЧитательскогоБилета_Sequence_1]) NULL,
    [ДатаРегистрации]          DATE          NULL,
    CONSTRAINT [PK_Данные для входа] PRIMARY KEY NONCLUSTERED ([НомерАккаунта] ASC),
    CONSTRAINT [Данные для входа_FK00] FOREIGN KEY ([НомерЧитательскогоБилета]) REFERENCES [dbo].[Читатели] ([НомерЧитательскогоБилета]) ON DELETE CASCADE ON UPDATE CASCADE
);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,839
Записей в блоге: 1
12.05.2017, 18:43
Sibya, у тебя используются sequence. Функция SCOPE_IDENTITY() с ними не работает. Отсюда и NULL. Нужно 1) убрать DEFAULT значение у колонки [Данные для входа].[НомерЧитательскогоБилета] и сделать её NOT NULL 2) переписать процедуру InsertReader следующим образом
Кликните здесь для просмотра всего текста
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE PROC InsertReader
    @Фамилия         varchar(255),
    @Имя             varchar(255),
    @Отчество        varchar(255),
    @Телефон         varchar(255),
    @Адрес           varchar(255),
    @Логин           varchar(255),
    @Пароль          varchar(255),
    @ДатаРегистрации date
AS
SET XACT_ABORT ON 
 
BEGIN TRAN
 
    DECLARE @НомерЧитательскогоБилета int
    SET @НомерЧитательскогоБилета = NEXT VALUE FOR [dbo].[Читатели_НомерЧитательскогоБилета_Sequence_1]
 
    INSERT INTO [Читатели] (НомерЧитательскогоБилета, Фамилия, Имя, Отчество, Телефон, Адрес)
        VALUES (@НомерЧитательскогоБилета, @Фамилия, @Имя, @Отчество, @Телефон, @Адрес)
 
    INSERT INTO [Данные для входа] ([Логин], [Пароль], [ДатаРегистрации], НомерЧитательскогоБилета)
        VALUES (@Логин, @Пароль, @ДатаРегистрации, @НомерЧитательскогоБилета)
 
COMMIT TRAN

P.S. Все колонки допускают NULL значения. Это мягко говоря странно. Поля Логин, пароль, Фамилия, Имя и ДатаРегистрации я бы пометил как NOT NULL.

Второй момент это длины строк. Ты реально ожидаешь людей с именем в 255 символов?

Третий момент это пароль который лучше не хранить в открытом виде. Вместо этого используются криптографические хеши.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.05.2017, 18:43
Помогаю со студенческими работами здесь

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

Внесение Даты В Поле Date/time
Как внести в поле Date/Time внести текущюю дату Today? Call UIdoc.FieldSetText("ДАТА_РЕЗОЛЮЦИИ_",Cstr(Today)) Заменяет тип поля с...

Вывод даты из базы и подсчет строк где втстречаются эти даты
В таблице mysql есть поле где хранится дата. и это дата встречается в этой таблице по несколько раз. Как в PHP вывести каждую дату и рядом...

Как сделать выборку периода даты в запросе с вычислением от запрошенной даты
Доброго времени суток! Есть форма, есть подчинённая форма, при запуске формы запрашивается "Дата", как сделать чтобы в...

Получение размера, даты создания, даты последнего доступа файлов
Прошу помощи. С помощью каких фунций / процедур можно получить размер, дату создания, дату последнего доступа (и т.д. стандартные...


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

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

Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru