DBTransaction и Enterprise Library - PullRequest
       1

DBTransaction и Enterprise Library

1 голос
/ 02 августа 2010

Мое требование - создать временную таблицу, затем выполнить процедуру сохранения, которая вставит строки в временную таблицу, а затем удалит временную таблицу. Однако, если при этом возникает ошибка, я хочу всегда удалять временную таблицу в конце. Я знаю, что с корпоративной библиотекой, управляющей соединениями, таблица удаляется, как только соединение закрывается. Однако просто хочу посмотреть, возможно ли это сделать с помощью блока Try and finally. Поддержка Sybase и MS Sql. Так, например:

string preUploadSql = "create table #CHANGES ( Id numeric(18) identity not null)";
string postUploadSql = "drop table #CHANGES";
bCommand.CommandText = preUploadSql + "; " exec sp_update ;";

DbConnection dbConnection  = DataAccessHelper.CreateConnection();
if ( dbConnection.State != ConnectionState.Open )
{
    dbConnection.Open();
}
DbTransaction dbTransaction = dbConnection.BeginTransaction();

try
{
    DataAccessHelper.ExecuteNonQuery( dbCommand, dbTransaction );
}
finally
{
    dbCommand.CommandText = postUploadSql;
    DataAccessHelper.ExecuteNonQuery( dbCommand, dbTransaction );
    dbTransaction.Commit();
    if ( dbConnection.State == ConnectionState.Open )
    {
    dbConnection.Close();
    }
}

Возможно ли что-то подобное? Когда я пытаюсь это сделать, если возникает ошибка, транзакция dbtransaction в последнем блоке, похоже, не имеет доступа к временной таблице, что заставляет меня думать, что в случае ошибки возникает область транзакции вне контекста или что-то в этом роде. Есть идеи? Как лучше всего справиться с этим?

1 Ответ

1 голос
/ 12 августа 2010

Чтобы обойти эту проблему, я использовал соединение и повторно использовал его вместо использования DBTransaction, поскольку Sybase (12 и 15), по-видимому, не позволял создавать команды таблицы как часть одной и той же транзакции. 1001 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...