Мое требование - создать временную таблицу, затем выполнить процедуру сохранения, которая вставит строки в временную таблицу, а затем удалит временную таблицу.
Однако, если при этом возникает ошибка, я хочу всегда удалять временную таблицу в конце. Я знаю, что с корпоративной библиотекой, управляющей соединениями, таблица удаляется, как только соединение закрывается. Однако просто хочу посмотреть, возможно ли это сделать с помощью блока 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 в последнем блоке, похоже, не имеет доступа к временной таблице, что заставляет меня думать, что в случае ошибки возникает область транзакции вне контекста или что-то в этом роде.
Есть идеи?
Как лучше всего справиться с этим?