Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 24.11.2011
Сообщений: 12

Insert Into в две связанные таблицы

06.12.2011, 14:17. Показов 6938. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется бд с тремя связанными таблицами. Один ко многим и один к одному.
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
OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();
            OleDbCommand add_comm = conn.CreateCommand();
            add_comm.Transaction = conn.BeginTransaction(System.Data.IsolationLevel.Chaos);
            try
            {
                add_comm.CommandType = CommandType.StoredProcedure;
                add_comm.CommandText = "[InsTovNameIDType]";
                add_comm.Parameters.Add("@Name", OleDbType.VarChar, 50).Value = tb_name.Text;
                add_comm.Parameters.Add("@ID_type", OleDbType.Integer).Value = comboBox1.SelectedValue;
                add_comm.ExecuteNonQuery();
 
                add_comm.CommandText = "[MaxID_Tovar]";
                int maxID = (Int32)add_comm.ExecuteScalar();
                MessageBox.Show(maxID.ToString());
 
                add_comm.CommandText = "[InsCostID_TovarCostTime]";
                add_comm.Parameters.Add("@ID_Tovar", OleDbType.Integer).Value = maxID;
                add_comm.Parameters.Add("@Cost", OleDbType.Decimal).Value = decimal.Parse(tb_cost.Text);
                add_comm.Parameters.Add("@Time", OleDbType.Date).Value = DateTime.Now;
                add_comm.ExecuteNonQuery();
 
 
                add_comm.Transaction.Commit();
                MessageBox.Show("Ура");
            }
            catch (Exception ex)
            {
                add_comm.Transaction.Rollback();
                MessageBox.Show(ex.ToString());
 
            }
            finally
            {
                conn.Close();
            }
Первых 2е команды выполняются на третей выкидывает ексепшен по поводу того что "Невозможно добавления или изменения записи.Для обеспечения целостности данных необходимо наличие связанной записи в таблице 'Tovar'"

схема базы находится тут:
Помогите написать БД для маленького магазина, нужно написать БД для магазина

если коротко то вот мои действия по поводу добавления данных в несколько таблиц:
1. Добавить в табл. Tovar - ID_type(из таблицы Type), ID_type берется с подключенного к Type combobox'a И добавить Name
2. Нахожу скаляр(максимальное значение ID_tovar с таблицы Tovar)
3. Добавляю в таблицу Cost найденный скаляр с п.2 и Cost & Time.

sql 3го запроса
SQL
1
2
INSERT INTO Cost ( ID_Tovar, Cost, [TIME] )
VALUES ([@ID_Tovar], [@Cost], [@TIME]);
Добавлено через 20 часов 40 минут
решил проблему так:
сначала добавил данные в таблицу Тоvar
потом нашел максимальный ключ из таблицы Тоvar и добавил данные в вторую таблицу
код:
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
50
51
            bool flag = true;
            int maxID;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();
            OleDbCommand add_comm = conn.CreateCommand();
            add_comm.Transaction = conn.BeginTransaction(System.Data.IsolationLevel.Chaos);
            try
            {
                add_comm.CommandType = CommandType.StoredProcedure;
                add_comm.CommandText = "[InsTovNameIDType]";
                add_comm.Parameters.Add("@Name", OleDbType.VarChar, 50).Value = tb_name.Text;
                add_comm.Parameters.Add("@ID_type", OleDbType.Integer).Value = cb_Type.SelectedValue;
                add_comm.ExecuteNonQuery();
                add_comm.Transaction.Commit();
            }
            catch (Exception ex)
            {
                add_comm.Transaction.Rollback();
                MessageBox.Show("","Ошибка");
                flag = false;
            }
            finally
            {
                if (flag)
                {
                    conn.Close();
                    conn.Open();
                    add_comm.Dispose();
                    add_comm = conn.CreateCommand();
                        add_comm.Transaction = conn.BeginTransaction(System.Data.IsolationLevel.Chaos);
                        try
                        {
                            add_comm.CommandType = CommandType.StoredProcedure;
                            add_comm.CommandText = "[MaxID_Tovar]";
                            maxID = (Int32)add_comm.ExecuteScalar();
                            MessageBox.Show("Max ID_Tovar = " + maxID.ToString());
                            add_comm.CommandText = "[InsCostID_TovarCostTime]";
                            add_comm.Parameters.Add("@ID_Tovar", OleDbType.Integer).Value = maxID;
                            add_comm.Parameters.Add("@Cost", OleDbType.Decimal).Value = decimal.Parse(tb_cost.Text);
                            add_comm.Parameters.Add("@Time", OleDbType.Date).Value = DateTime.Now;
                            add_comm.ExecuteNonQuery();
                            add_comm.Transaction.Commit();
                        }
                        catch (Exception ex)
                        {
                            add_comm.Transaction.Rollback();
                            MessageBox.Show(ex.ToString());
                        }
                        conn.Close();                  
                }
                conn.Close();
если есть другие варианты - прошу озвучить.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2011, 14:17
Ответы с готовыми решениями:

Insert, Update, Delete и две связанные таблицы
Доброе время суток. Помогите пожалуйста с таким вопросом. Есть в бд две таблицы(№1 с столбцами "ID", "Name",...

Как сделать INSERT запрос в связанные таблицы
Вот есть у меня, например, Таблица1 с полями "Код" и "Имя" и Таблица2 с полями "Код" и "Фамилия". Вот обычный INSERT я делаю...

Как отобразить две связанные таблицы?
Только начал изучать ASP.NET MVC и не могу нигде найти информацию как в одном представлении отобразить две связанные таблицы. Есть две...

2
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
06.12.2011, 14:33
Цитата Сообщение от pss_ua Посмотреть сообщение
потом нашел максимальный ключ из таблицы Тоvar и добавил данные в вторую таблицу
Неправильный подход. Если сразу после тебя кто-то вставит в БД еще одно значение ты получишь неверный результат. В таком случае нужно пользоваться функцией SCOPE_IDENTITY (Transact-SQL)

Добавлено через 3 минуты
https://www.cyberforum.ru/ado-... ost2173419
0
1 / 1 / 0
Регистрация: 24.11.2011
Сообщений: 12
06.12.2011, 15:26  [ТС]
Спасибо.
Знаю что неправильно но не знал как это решить. Хотя этот подход удовлетворительный потому что с базой будет работать один человек(клиент будет переписан для КПК) так что никто не сможет добавить запись.

Добавлено через 5 минут
и еще. проблема была в добавлении. в первом коде который я описал все происходило в одной транзакции. ошибка вылетала на 3м запросе когда я хотел добавить еще не существующий ID_Tovar в таблицу Цен(Cost) error = "Невозможно добавления или изменения записи.Для обеспечения целостности данных необходимо наличие связанной записи в таблице 'Tovar'"

Добавлено через 4 минуты
и еще еще(такой себе P.S.S) сейчас работаю с Access, потом буду переписывать под SQLite, на сколько я знаю ни в одном из этих СУБД нет хранимых процедур, как быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2011, 15:26
Помогаю со студенческими работами здесь

Нормализация БД, две связанные таблицы. А что дальше?
Здравствуйте. Помогите разобраться с задачкой Есть две таблицы РАБОТНИКИ и КОМПАНИИ (названия изменены) РАБОТНИКИ ...

Внесение данных в две связанные таблицы MySQL
Друзья, подскажите пожалуйста! Я совсем начинающий в БД и web программировании, не могу никак разобраться. Есть две таблицы, связанные...

Как вставить данные в две связанные таблицы
Добрый день! В общем как можно заполнить данные в две связанные таблицы(один ко многим например) через запрос insert into? ...

Insert в две таблицы
Имеются 3 таблицы TABLE `user` `id` auto_increment `name` ........... TABLE `list` `id` `title`

INSERT INTO в две таблицы
Добрый вечер! У меня есть две таблицы: admins и hotels. В admins поля: Первичный ключ id_a, login, password, email. В hotels:...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru