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

Использование транзакции при работе с MySQL

04.12.2012, 07:25. Показов 3023. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Есть подключение к БД SQL в которой всего две таблицы
1 -TEST_TRANS -(имеет одно поле "snils")
2- TEST_TRANS_2-(имеет два поля "snils" и "Data")
происходит запись в таблицы следующим образом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void InsertTEST_TRANS2()
        {
            String calcmixt = BDConnection;
            conn = new SqlConnection(calcmixt);
            OpenSqlConnection();
            using (SqlCommand sql = conn.CreateCommand())
            {
                sql.CommandText = @"INSERT INTO TEST_TRANS(Snils)VALUES (@p_Snils2)";
                sql.Parameters.Add("@p_Snils2", textBox1.Text);
                sql.CommandText = @"INSERT INTO TEST_TRANS_2(Snils,Data)VALUES (@p_Snils1,@p_data)";
                sql.Parameters.Add("@p_Snils1", textBox1.Text);
                sql.Parameters.Add("@p_data", textBox2.Text);
                sql.ExecuteNonQuery();
            }
            
        }
Подскажите как использовать транзакции в этом случае??????
Предположим:. Введем в textBox2 -некорректную дату тогда транзакция должна откатить назад и не допустить записи в таблицы. (Где нужно поставить Начало транзакции затем подтверждение и в случае неудачи откат???)
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2012, 07:25
Ответы с готовыми решениями:

транзакции в C# при работе с MySQL
Доброго времени суток. В общем проблема такая. Пытаюсь использовать механизм транзакций в своем...

Использование показателей при работе с массивами
n натуральное, a1,...,an действительные числа. Найти : a1a2n+a2a2n-1+...+anan+1

Использование ajax при работе с формами и бд
Добрый вечер! У меня написан на чистом php такой демо-пример http://example.book-fan.ru/index.php...

Использование FCB при работе с файлами
Здравствуйте! Я не понимаю как указать на FBC для FCB функций int 21h. Пробовала ...

10
1497 / 1045 / 146
Регистрация: 01.10.2009
Сообщений: 3,510
Записей в блоге: 1
04.12.2012, 07:57 2
а какой механизм хранения используете?
0
7 / 7 / 2
Регистрация: 28.09.2012
Сообщений: 82
04.12.2012, 08:34  [ТС] 3
Цитата Сообщение от DM_AND Посмотреть сообщение
а какой механизм хранения используете?
эм.....
Хранение данных происходит на SQL-сервере.
Хотел попробовать использование транзакции..
0
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
04.12.2012, 09:30 4
Перед вставками вызываете BeginTransaction, выставляете свойство Transaction у всех выполняемых команд.
Оборачиваете ваши вставки в try-catch. В случае ошибки вызываете Rollback(), в случае успеха Commit().
Вот тут есть пример - http://msdn.microsoft.com/ru-r... 73566.aspx

PS. SqlCommand/SqlConnection вроде используется для работы с MS SQL server, а не с MySQL.
1
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
04.12.2012, 09:37 5
Цитата Сообщение от seneka
Хранение данных происходит на SQL-сервере.
Хотел попробовать использование транзакции..
Таблица в MySQL может использовать 2 движка: MyISAM и InnoDB. Один из них поддерживает транзакции, другой нет.
1
7 / 7 / 2
Регистрация: 28.09.2012
Сообщений: 82
04.12.2012, 10:47  [ТС] 6
Ну вот как то так получилось.. наверно немного лишнего и можно как то сократить НО работает
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
 public void InsertTEST_TRANS2()
        {
            String calcmixt = BDConnection;
            conn = new SqlConnection(calcmixt);
            OpenSqlConnection();
            using (SqlCommand sql1 = conn.CreateCommand())
            {
                using (SqlCommand sql2 = conn.CreateCommand())
                {
                    SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
 
                    sql1.CommandText = @"INSERT INTO TEST_TRANS(Snils)VALUES (@p_Snils2)";
                    sql1.Parameters.Add("@p_Snils2", textBox1.Text);
                    sql1.Transaction = transaction; 
 
                    sql2.CommandText = @"INSERT INTO TEST_TRANS_2(Snils,Data)VALUES (@p_Snils1,@p_data)";
                    sql2.Parameters.Add("@p_Snils1", textBox1.Text);
                    sql2.Parameters.Add("@p_data", textBox2.Text);
                    sql2.Transaction = transaction; 
                    try
                    {
                        sql1.ExecuteNonQuery();
                        sql2.ExecuteNonQuery();
                        transaction.Commit();
                    }
                    catch
                    {
                       transaction.Rollback();
                    }
                }
            }
            
        }
Цитата Сообщение от Grossmeister Посмотреть сообщение
Таблица в MySQL может использовать 2 движка: MyISAM и InnoDB
а есть ли возможность посмотреть конкретную таблицу какой движок используется?
0
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
04.12.2012, 11:45 7
Цитата Сообщение от seneka Посмотреть сообщение
а есть ли возможность посмотреть конкретную таблицу какой движок используется?
Еще раз спрошу, вы уверены что вы используете именно MySQL, а не MS SQL?
Классы SqlCommand/SqlCommand используются именно для MS SQL.
0
7 / 7 / 2
Регистрация: 28.09.2012
Сообщений: 82
04.12.2012, 12:54  [ТС] 8
Цитата Сообщение от turbanoff Посмотреть сообщение
Еще раз спрошу, вы уверены что вы используете именно MySQL, а не MS SQL?
MSSQL
0
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
04.12.2012, 12:58 9
Цитата Сообщение от seneka Посмотреть сообщение
MSSQL
Ну вот, а что же вы людей в заблуждение вводите. Тогда вопросы DM_AND и Grossmeister теряют актуальность.
0
7 / 7 / 2
Регистрация: 28.09.2012
Сообщений: 82
05.12.2012, 04:50  [ТС] 10
Прошу прощения я никого не хотел ввести в заблуждение.. ( так получилось)
0
1497 / 1045 / 146
Регистрация: 01.10.2009
Сообщений: 3,510
Записей в блоге: 1
05.12.2012, 08:17 11
Цитата Сообщение от Grossmeister Посмотреть сообщение
Таблица в MySQL может использовать 2 движка: MyISAM и InnoDB. Один из них поддерживает транзакции, другой нет.
Да не их больше
MyISAM
Archive
CSV
Memory (HEAP)
MERGE
FEDERATED
BLACKHOLE
и это только основные
0
05.12.2012, 08:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2012, 08:17
Помогаю со студенческими работами здесь

Использование показателей при работе с массивами
Даны a1,...,an действительные числа, n* натуральное число. Если в этой последовательности...

Использование указателей при работе с массивами
Здесь двумерный массив, теперь надо написать его с использованием указателей. У меня не...

Использование Random при работе с массивами
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Использование функций при работе со строками
Удалить из строки слова, содержащие повторяющиеся символы помогите пожалуйста


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

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