Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Транзакции в C#

5.5K
17 марта 2008 года
[Veter]
91 / / 25.09.2007
Привет всем. Люди подскажите пожалуйста как огранизовать транзакции при работе с БД, т.к. я в этом еще новичек. Допустим есть одна программа, она установлена на несколькик компах. Она связывается с БД, так вот как мне организовать транзакции при работе с ней чтобы все пользователи одновременно могли с ней работать...
Спасибо. Сори если задал глупый вопрос, т.к. несмог найти в МСДН...
5
17 марта 2008 года
hardcase
4.5K / / 09.08.2005
[quote='[Veter];238092']Люди подскажите пожалуйста как огранизовать транзакции при работе с БД, т.к. я в этом еще новичек.[/quote]
Могу предложить вам 2 способа работы с транзакциями.
1) Через экземпляр DbTransaction (в вашем случае, видимо, SqlTransaction), который вы приписываете в DbCommand (SqlCommand), при создании команды перед ее выполнением.
2) Через пространство имен System.Transactions. (сборка System.Transactions.dll) и объект TransactionScope.
Пример использования:
 
Код:
using(TransactionScope scope = new TransactionScope()) {
   /* TODO: код транзакции: создание команды, выполнение и прочая.... */

   scope.Complete();
}
При достижении вызова Complete происходит фиксация транзакции.
5.5K
17 марта 2008 года
[Veter]
91 / / 25.09.2007
Цитата: hardcase
Могу предложить вам 2 способа работы с транзакциями.
1) Через экземпляр DbTransaction (в вашем случае, видимо, SqlTransaction), который вы приписываете в DbCommand (SqlCommand), при создании команды перед ее выполнением.
2) Через пространство имен System.Transactions. (сборка System.Transactions.dll) и объект TransactionScope.
Пример использования:
 
Код:
using(TransactionScope scope = new TransactionScope()) {
   /* TODO: код транзакции: создание команды, выполнение и прочая.... */

   scope.Complete();
}
При достижении вызова Complete происходит фиксация транзакции.



Огромное спасибо. Какраз то что нужно. Все работает отлично.
Только еще есть 1 вопросик:
вот с одного клиента я чтото добавил в БД, а как сделать так, чтобы все остальные клиенты сразу увидели изменения? Ну можно конечно по таймеру "обновлять вид", но поидее есть какойто способ покрасивее...

5
17 марта 2008 года
hardcase
4.5K / / 09.08.2005
[quote='[Veter];238115']Только еще есть 1 вопросик:
вот с одного клиента я чтото добавил в БД, а как сделать так, чтобы все остальные клиенты сразу увидели изменения? Ну можно конечно по таймеру "обновлять вид", но поидее есть какойто способ покрасивее...[/quote]Это на самом деле один из проблемных вопросов.
Можно поступать следующим образом (так умеет делать ASP.NET, но это легко реализовать руками):
1) заводим таблицу, в которой будет находиться специальный тег (целое число).
2) после каждого изменения интересующей нас таблицы (можно повесить на нее insert/update/delete триггер) мы увеличиваем этот тег на единицу.
3) периодически в фоновом режиме наш клиент запрашивает этот тег и сравнивает его с тем значением что уже есть у него, и если тег имеет большее значение, то имеет смысл обновить представление.
5.5K
17 марта 2008 года
[Veter]
91 / / 25.09.2007
Цитата: hardcase
Это на самом деле один из проблемных вопросов.
Можно поступать следующим образом (так умеет делать ASP.NET, но это легко реализовать руками):
1) заводим таблицу, в которой будет находиться специальный тег (целое число).
2) после каждого изменения интересующей нас таблицы (можно повесить на нее insert/update/delete триггер) мы увеличиваем этот тег на единицу.
3) периодически в фоновом режиме наш клиент запрашивает этот тег и сравнивает его с тем значением что уже есть у него, и если тег имеет большее значение, то имеет смысл обновить представление.


мм, а как собственно обновить представление... Сорри за елементарный вопрос...

5
17 марта 2008 года
hardcase
4.5K / / 09.08.2005
[quote='[Veter];238122']мм, а как собственно обновить представление... Сорри за елементарный вопрос...[/quote]
Если вы пользуетесь датасетами, то нужно сказать как минимум
 
Код:
myDataSet.Fill();

Если нет, то вам виднее, как организована ваша архитектура.
5.5K
17 марта 2008 года
[Veter]
91 / / 25.09.2007
Цитата: hardcase
Если вы пользуетесь датасетами, то нужно сказать как минимум
 
Код:
myDataSet.Fill();

Если нет, то вам виднее, как организована ваша архитектура.



от я дурак. :) Спасибо огромное за помощь. Прочитал Ваш ответ и дошло... Хотя сам знал :) блин нада ж такие провалы в памяти :)
Еще раз спасибо

241
18 марта 2008 года
Sanila_san
1.6K / / 07.06.2005
Мможно сделать ещё такую штуку: организовать транзакции в хранимых процедурах, это в некоторых случаях даже удобнее.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог