Мы используем приложение на сервере с Sql-сервером, и оно получает много SDF-файлов от клиентов для обновления базы данных SqlServer, обновления для многих таблиц, и я использую Transaction для этого, приложение на сервере используется несколькими пользователями, чем это возможно два обновления в одно и то же время и два с транзакцией, приложение выдает исключение, что таблица используется другой транзакцией !!
Новая транзакция не разрешена, поскольку в сеансе запущены другие потоки.
и у пользователя есть еще одна задача, которую нужно выполнить в приложении с транзакцией, на тот момент, если есть обновление, он должен ждать до его завершения.
Есть идеи?
Обновление: есть код для моей функции: это мои функции с транзакцией, запущенной в BackgroundWorker с таймером:
DbTransaction trans = ConnectionClass.Instance.MasterConnection.BeginTransaction();
try
{
ClientDalc.UpdateClient(ChosenClient, trans);
// other functions with the same transaction
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
return false;
}
Клиент обновления:
public static bool UpdateClient(ClientEntity ChosenClient, DbTransaction trans)
{
bool retVal = true;
string sql = "UPDATE ClientTable Set ........";
try
{
using (DbCommand cmd = DatabaseClass.GetDbCommand(sql))
{
cmd.Transaction = trans;
cmd.Parameters.Add(DatabaseClass.GetParameter("@Name", Client.Name));
//
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
retVal = false;
}
return retVal;
}
Если я запускаю что-то еще в то же время, когда выполняется BackgroundWorker, я получаю исключение, даже если это не транзакция
ExecuteReader требует, чтобы команда имела транзакцию, когда назначенное команде соединение находится в ожидающей локальной транзакции. Свойство Transaction команды не было инициализировано. ”