我正在使用 Visual Studio 2012 和 MS SQL Server 2008 R2。
在我的代码中,我使用了 DbConnection
和 DbTransaction
。这是我的代码:
DbConnection dbConnection = null;
DbTransaction dbTransaction = null;
try
{
dbConnection = DbProviderFactories.GetFactory("System.Data.SqlClient").CreateConnection();
dbConnection.ConnectionString = connectionString;
dbConnection.Open();
dbTransaction = dbConnection.BeginTransaction();
// do my work using dbConnection and dbTransaction
dbTransaction.Commit();
}
catch (MyWorkFailedException mwfe)
{
dbTransaction.Rollback();
throw;
}
finally
{
if (dbConnection != null)
{
dbConnection.Close();
dbConnection.Dispose();
}
}
dbTransaction.Commit();
或 dbTransaction.Rollback();
是否可能抛出异常?
如果是,那么如何在我的代码中处理它? c#程序员通常如何处理这种情况?或者他们不处理这种情况?
最佳答案
是的,Commit
和Rollback
都可以 抛出异常。但是,这些可能应该向上传播并记录或作为错误显示给用户。您希望如何处理错误完全取决于您,但通常错误是由于连接关闭造成的。其次,您应该利用 using
using (var dbConnection = DbProviderFactories.GetFactory("System.Data.SqlClient").CreateConnection())
{
dbConnection.ConnectionString = connectionString;
dbConnection.Open();
using (var dbTransaction = dbConnection.BeginTransaction())
{
//Do work here
dbTransaction.Commit();
}
}
DbTransaction
将自动回滚其 dispose 方法(假设尚未提交)。此代码抛出的异常通常不是您可以妥善处理的。大多数情况下,它们来自 SQL 错误(无效语法、FK 错误等)或关闭的连接。
只要你有一个好的日志系统,上面的代码应该就是你所需要的。
关于c# - DbTransaction 的Commit() 或Rollback() 抛出异常如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425748/