Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
1
MS SQL

ComboBox. Транзакции

01.12.2017, 22:46. Показов 1328. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!!
Помогите разобраться. У меня есть БД на Ms SQL, в ней две таблицы, одна называется Sub_Nar, а другая Nar_DL_UL. Таблица Sub_Nar имеет два поля:ID (поле является ключом и принимает значение int) и Sub_Nar, а в таблице Nar_DL_UL тоже есть поле Sub_Nar (тоже значение int). Так вот, у меня эти таблицы связаны по полю ID из таблицы Sub_Nar с полем Sub_Nar из таблицы Nar_DL_UL. На форме есть comboBox где должны быть данные из поля Sub_Nar таблицы Sub_Nar, но при нажатии кнопки сохранить эти данные должны сохраняться в поле Sub_Nar таблицы Nar_DL_UL, так же нужно предусмотреть тот шанс, что можно было бы дополнять comboBox своими записями.
Я с comboBox не сталкивалась раньше, по этому прошу у вас помощи, что бы разобраться.
Вот пример листинга для textBox и 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
            SqlConnection conn = new SqlConnection(ConnectionString);
            conn.ConnectionString = @"Data Source=LEX-PEX\SQLEXPRESS;Initial Catalog=GIBDD;Integrated Security=True";
            conn.Open();
            SqlCommand myCommand = conn.CreateCommand();
            //Создаем транзакцию
            myCommand.Transaction = conn.BeginTransaction(System.Data.IsolationLevel.Serializable);
            try
            {
                myCommand.CommandText = "INSERT INTO Nar_DL_UL ([№Nar], Data_Nar, Naim_Sub) VALUES (@n, @dn, @ns)";
                string n = Convert.ToString(textBox3.Text);
                DateTime dn = Convert.ToDateTime(dateTimePicker1.Value);
                string ns = Convert.ToString(textBox4.Text);
 
                myCommand.Parameters.Add("n", SqlDbType.Text);
                myCommand.Parameters.Add("dn", SqlDbType.SmallDateTime);
                myCommand.Parameters.Add("ns", SqlDbType.Text);
 
                myCommand.Parameters["n"].Value = n;
                myCommand.Parameters["dn"].Value = Convert.ToDateTime(dn);
                myCommand.Parameters["ns"].Value = ns;
 
                myCommand.ExecuteNonQuery();
                //Подтверждаем транзакцию
                myCommand.Transaction.Commit();
                myCommand.CommandText = "SELECT @@IDENTITY";
                conn.Close();
                MessageBox.Show("Запись успешно добавлена!");
            }
                catch (Exception ex)
                {
                //Отклоняем транзакцию
                myCommand.Transaction.Rollback();
                MessageBox.Show("Данные о нарушении вставить не удалось из-за ошибки:\n\r" + ex.Message);
                }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2017, 22:46
Ответы с готовыми решениями:

Транзакции
using (System.Transactions.TransactionScope transactionScope = new...

транзакции
Доброго времени суток! Подскажите кто-нибудь как решить следующую проблему. Провожу сохранение...

Транзакции
Нужно ли создавать транзакцию для вызова процедуры базы, если в процедуре уже создается транзакция...

Запуск транзакции
Здравствуйте, помогите разобраться с вопросом. Есть приложение которое работает с сервером MS SQL и...

5
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,705
02.12.2017, 12:10 2
Судя по колонкам, Sub_Nar представляет собой дерево, и в зависимости от ограничений, Sub_Nar и Nar_DL_UL могут иметь либо отношения 1-1, либо 1-m. В любой случае, нужен полный текст исключения, если у вас что-то не получается.

Не по теме:


Sub_Nar, Nar_DL_UL - Искренне желаю тем, кто создавал эту базу и давал такие имена таблицам, чтобы они также именовали своих детей, чтобы окружающие думали, что это два монгольских брата, которых они приютили в свою семью. :D

0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
02.12.2017, 22:48 3
Расскажите мне, глупому, зачем на вставку мелкую делать явную транзакцию, да еще и блочить таблицу специально таким уровнем изоляции? Какой сакральный смысл в этом?
Ведь по умолчанию вставка не блочит вроде как таблицу , да и уровень изоляции ради вставки одним пакетом менять... ну ка-то глупо, по моему.
К тому же сиквел в случае ошибки сам отменит транзакцию по инсерту.
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
03.12.2017, 17:21  [ТС] 4
полей в бд будет много и бд будет лежать на сервере, по этому и вставляю транзакцию. отменяю транзакцию для того, что бы изменения сохранились в бд. мне нужно аналогичным образом как для textBox прописать comboBox и checkBox. Но я просто даже не представляю как это сделать. если с checkBox понятно, это просто тип подобрать..то как с comboBox не ясно
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
04.12.2017, 01:44 5
Лучший ответ Сообщение было отмечено Olesya1 как решение

Решение

Olesya1, я так понимаю, что с СУБД это ваш первый опыт, и Вы еще не понимаете её работы, ровно как и транзакций, и уровня изоляции.
А если по делу - у комбобокса есть свойства ValueMember и DisplayMember, а также DataSource, коими можно доставать выбранные данные.
А по БД поверьте, если используете 1 таблицу и 1 команду - не заморачивайтесь транзакциями явными. Она сама себя создаст неявно и сама откатится в случае ошибки. Объявлять их в явном виде нужно когда за проход нужно производить действия, особенно при вставке и удалению из нескольких связанных таблиц, создавая/удаляя внешние ключи. А лучше погуглите немного о транзакциях
1
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
04.12.2017, 09:33  [ТС] 6
hoolygan, Спасибо большое за информацию, если будут вопросы напишу)))
0
04.12.2017, 09:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2017, 09:33
Помогаю со студенческими работами здесь

ExecuteScalar в транзакции
Метод добавляет в таблицу Пассажир данные о пассажире и используя его id добавляет данные в таблицу...

некорректная работа транзакции
Здравствуйте проблема в том, что первый запрос выполняется, а второй нет. Хотя пишет, что...

Ошибка зомби транзакции
День добрый с толкнулся с одной проблемой. Пишу программу на c# работающая с firebird 3.0...

Транзакции с# с чего начать?
Доброго времени суток! Если по простому, вопрос такой. Есть написанный небольшой проект в...


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

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