Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
38 / 38 / 10
Регистрация: 08.03.2012
Сообщений: 236
1

некорректная работа транзакции

19.05.2013, 19:38. Показов 1165. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте проблема в том, что первый запрос выполняется, а второй нет. Хотя пишет, что транзакция прошла.
В таблице ЗаписиПОП все апдейтится как нужно, а в таблице Товары - нет.
Вот код:
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
                OleDbTransaction transaction;
                OleDbCommand command = new OleDbCommand();
                if (connection.State == ConnectionState.Closed)
                    connection.Open();
                transaction = connection.BeginTransaction();
                command.Connection = connection;
                command.Transaction = transaction;
                
                try
                {
                    command.CommandText = "UPDATE ЗаписиПОП SET Количество = @Count WHERE Код = @Kod";
                    command.Parameters.Add("@Count", OleDbType.Integer).Value =
                        int.Parse(dgvPOP[8, bs.Position].Value.ToString());
                    command.Parameters.Add("@Kod", OleDbType.Integer).Value =
                        int.Parse(dgvPOP[11, bs.Position].Value.ToString());
 
                    command.ExecuteNonQuery();
 
                    command.CommandText = "UPDATE Товары SET Количество = Количество + @Count WHERE Код = @Kod";
                    command.Parameters.Add("@Count", OleDbType.Integer).Value =
                        int.Parse(dgvPOP[8, bs.Position].Value.ToString());
                    command.Parameters.Add("@Kod", OleDbType.UnsignedInt).Value =
                        int.Parse(dgvPOP[11, bs.Position].Value.ToString());
 
                    command.ExecuteNonQuery();
 
                    MessageBox.Show("Транзакция прошла");
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    if (connection.State == ConnectionState.Open)
                        connection.Close();
                    ShowData();
                    Calculate();
                }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2013, 19:38
Ответы с готовыми решениями:

Некорректная работа SelectionChanged
Проблема следующая, при выборе в гриде Транспорта интересующего транспорта, в грид ниже (Ремонты)...

Некорректная работа Process
Некорректно работает следущий код: proc.StartInfo.FileName = arrfile; proc.StartInfo.Arguments...

Некорректная работа регулярного выражения
var request = WebRequest.Create("http://tnoduse2.blogspot.ru/"); using (var responses...

Некорректная работа MOUSEEVENTF.MOVE
Здравствуйте. Моя проблема заключается в том, что при использовании флага MOUSEEVENTF.MOVE, курсор...

7
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
20.05.2013, 00:40 2
Что-то мне нравится, что вы добавляете 4 параметра до запуска command второй раз.
Уверены что выводится "транзакция прошла" и вы запускаете именно последнюю версию? Может попробовать пересобрать проект?
0
38 / 38 / 10
Регистрация: 08.03.2012
Сообщений: 236
20.05.2013, 11:45  [ТС] 3
Цитата Сообщение от turbanoff Посмотреть сообщение
вы добавляете 4 параметра до запуска command второй раз
там их 2, ну а когда тогда их добавлять?

Цитата Сообщение от turbanoff Посмотреть сообщение
Уверены что выводится "транзакция прошла" и вы запускаете именно последнюю версию?
100%

Цитата Сообщение от turbanoff Посмотреть сообщение
Может попробовать пересобрать проект?
уже делал все, что возможно. Дело в том, что если запустить 2 запрос сам по себе, вне транзакции, command.ExecuteNonQuery() возвращает единицу, но изменений в базе нет.
Пробовал запустить запрос на стороне самой СУБД, там все апдейтиться, а со стороны клиента ничего.

Добавлено через 6 минут
Цитата Сообщение от Nike Jagger Посмотреть сообщение
command.ExecuteNonQuery() возвращает единицу
соврал. извиняюсь. возвращает ноль, но почему?
Ведь тот же запрос запускаю в Access'е и все работает отлично.
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.05.2013, 12:30 4
Цитата Сообщение от Nike Jagger Посмотреть сообщение
возвращает ноль, но почему?
Тоже кажется странным ... Как по мне, так должна выдаваться ошибка, извящающая о том, что OleDbCommand не в курсе, что такое @Count и @Kod. Так как в тексте запроса OleDbCommand параметры должны обозначаться знаком ? (вопроса).
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
20.05.2013, 12:42 5
Цитата Сообщение от Nike Jagger Посмотреть сообщение
там их 2, ну а когда тогда их добавлять?
Вы добавляете два, а потом еще два.

А вообще попробуйте использовать ?, вместо именованных параметров, как посоветовал kodv.

PS. И всегда указывайте СУБД с которой вы работаете. Во избежание путаниц.
0
38 / 38 / 10
Регистрация: 08.03.2012
Сообщений: 236
21.05.2013, 13:06  [ТС] 6
Цитата Сообщение от kodv Посмотреть сообщение
должна выдаваться ошибка, извящающая о том, что OleDbCommand не в курсе, что такое @Count и @Kod
у меня во всем проекте так запросы написаны и все нормально работает, просто привык как в SqlCommand.
Поменял на знак "?" все равно ничего не апдейтит
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
21.05.2013, 18:54 7
Цитата Сообщение от Nike Jagger Посмотреть сообщение
во всем проекте так запросы написаны и все нормально работает
Удивительно, ибо MSDN пишет так:
Для объектов OleDbDataAdapter и OdbcDataAdapter для идентификации параметров необходимо использовать в качестве местозаполнителей вопросительные знаки (?)
Цитата Сообщение от Nike Jagger Посмотреть сообщение
Поменял на знак "?" все равно ничего не апдейтит
Вы и со знаоком вопроса тоже добавляете сначала первый и второй параметр, а потом еще третий и четвертый (думая, что это первый и второй)? Используйте для каждого запроса свой OleDbCommand, чтобы уж наверняка.
0
38 / 38 / 10
Регистрация: 08.03.2012
Сообщений: 236
21.05.2013, 20:40  [ТС] 8
Цитата Сообщение от kodv Посмотреть сообщение
Удивительно
честно, смысл мне тут врать?

Добавлял все по порядку. И разные OleDbCommand использовал и ничего.
Я даже уже делаю без транзакции, и все равно.
Короче бред какой-то...

Добавлено через 1 час 18 минут
Господа, всем спасибо!
Проблема в моих мозгах. Я за код товара брал код записи. Короче код не тот был. Теперь все работает
0
21.05.2013, 20:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2013, 20:40
Помогаю со студенческими работами здесь

Некорректная работа WebClient (не удается загрузить изображение)
Топик у темы не прописывается, ссылайся на запрешенные слова. Тема: Проблема с WebClient (не...

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

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

ComboBox. Транзакции
Доброго времени суток!! Помогите разобраться. У меня есть БД на Ms SQL, в ней две таблицы, одна...


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

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