C# DBTransaction与企业库
我的要求是创建临时表,然后执行存储过程,将行插入临时表,然后删除临时表。 但是,如果执行此操作时出现错误,我希望始终在末尾删除临时表。我知道,使用enterprise Library管理连接时,一旦连接关闭,表就会被删除。然而,我只是想看看是否有可能使用Try和Finally块来实现这一点。 同时支持Sybase和MS Sql。 例如:C# DBTransaction与企业库,c#,.net,enterprise-library,C#,.net,Enterprise Library,我的要求是创建临时表,然后执行存储过程,将行插入临时表,然后删除临时表。 但是,如果执行此操作时出现错误,我希望始终在末尾删除临时表。我知道,使用enterprise Library管理连接时,一旦连接关闭,表就会被删除。然而,我只是想看看是否有可能使用Try和Finally块来实现这一点。 同时支持Sybase和MS Sql。 例如: string preUploadSql = "create table #CHANGES ( Id numeric(18) identity not null)
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似乎无法访问temp表,这使我认为当出现错误时,事务范围超出了上下文或类似的内容。
有什么想法吗?
如何最好地处理这个问题?为了解决这个问题,我所做的是使用连接并重用它,而不是使用DBTransaction,因为Sybase(12和15)似乎不允许将create table命令作为同一事务的一部分。为了解决这个问题,我所做的是使用连接并重用它,而不是使用DBTransaction,因为Sybase(12和15)似乎不允许将create table命令作为同一事务的一部分。+1使用DBTransaction+1的示例使用DBTransaction的示例