using(TransactionScope scope = new TransactionScope()) {
/* TODO: код транзакции: создание команды, выполнение и прочая.... */
scope.Complete();
}
Транзакции в C#
Спасибо. Сори если задал глупый вопрос, т.к. несмог найти в МСДН...
Могу предложить вам 2 способа работы с транзакциями.
1) Через экземпляр DbTransaction (в вашем случае, видимо, SqlTransaction), который вы приписываете в DbCommand (SqlCommand), при создании команды перед ее выполнением.
2) Через пространство имен System.Transactions. (сборка System.Transactions.dll) и объект TransactionScope.
Пример использования:
Код:
Цитата: hardcase
Могу предложить вам 2 способа работы с транзакциями.
1) Через экземпляр DbTransaction (в вашем случае, видимо, SqlTransaction), который вы приписываете в DbCommand (SqlCommand), при создании команды перед ее выполнением.
2) Через пространство имен System.Transactions. (сборка System.Transactions.dll) и объект TransactionScope.
Пример использования:
При достижении вызова Complete происходит фиксация транзакции.
1) Через экземпляр DbTransaction (в вашем случае, видимо, SqlTransaction), который вы приписываете в DbCommand (SqlCommand), при создании команды перед ее выполнением.
2) Через пространство имен System.Transactions. (сборка System.Transactions.dll) и объект TransactionScope.
Пример использования:
Код:
using(TransactionScope scope = new TransactionScope()) {
/* TODO: код транзакции: создание команды, выполнение и прочая.... */
scope.Complete();
}
/* TODO: код транзакции: создание команды, выполнение и прочая.... */
scope.Complete();
}
Огромное спасибо. Какраз то что нужно. Все работает отлично.
Только еще есть 1 вопросик:
вот с одного клиента я чтото добавил в БД, а как сделать так, чтобы все остальные клиенты сразу увидели изменения? Ну можно конечно по таймеру "обновлять вид", но поидее есть какойто способ покрасивее...
вот с одного клиента я чтото добавил в БД, а как сделать так, чтобы все остальные клиенты сразу увидели изменения? Ну можно конечно по таймеру "обновлять вид", но поидее есть какойто способ покрасивее...[/quote]Это на самом деле один из проблемных вопросов.
Можно поступать следующим образом (так умеет делать ASP.NET, но это легко реализовать руками):
1) заводим таблицу, в которой будет находиться специальный тег (целое число).
2) после каждого изменения интересующей нас таблицы (можно повесить на нее insert/update/delete триггер) мы увеличиваем этот тег на единицу.
3) периодически в фоновом режиме наш клиент запрашивает этот тег и сравнивает его с тем значением что уже есть у него, и если тег имеет большее значение, то имеет смысл обновить представление.
Цитата: hardcase
Это на самом деле один из проблемных вопросов.
Можно поступать следующим образом (так умеет делать ASP.NET, но это легко реализовать руками):
1) заводим таблицу, в которой будет находиться специальный тег (целое число).
2) после каждого изменения интересующей нас таблицы (можно повесить на нее insert/update/delete триггер) мы увеличиваем этот тег на единицу.
3) периодически в фоновом режиме наш клиент запрашивает этот тег и сравнивает его с тем значением что уже есть у него, и если тег имеет большее значение, то имеет смысл обновить представление.
Можно поступать следующим образом (так умеет делать ASP.NET, но это легко реализовать руками):
1) заводим таблицу, в которой будет находиться специальный тег (целое число).
2) после каждого изменения интересующей нас таблицы (можно повесить на нее insert/update/delete триггер) мы увеличиваем этот тег на единицу.
3) периодически в фоновом режиме наш клиент запрашивает этот тег и сравнивает его с тем значением что уже есть у него, и если тег имеет большее значение, то имеет смысл обновить представление.
мм, а как собственно обновить представление... Сорри за елементарный вопрос...
Если вы пользуетесь датасетами, то нужно сказать как минимум
Код:
myDataSet.Fill();
Если нет, то вам виднее, как организована ваша архитектура.
Цитата: hardcase
Если вы пользуетесь датасетами, то нужно сказать как минимум
Если нет, то вам виднее, как организована ваша архитектура.
Код:
myDataSet.Fill();
Если нет, то вам виднее, как организована ваша архитектура.
от я дурак. :) Спасибо огромное за помощь. Прочитал Ваш ответ и дошло... Хотя сам знал :) блин нада ж такие провалы в памяти :)
Еще раз спасибо
Мможно сделать ещё такую штуку: организовать транзакции в хранимых процедурах, это в некоторых случаях даже удобнее.