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

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

06.12.2011, 14:17. Показов 6944. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru