我遇到了一些与我在代码中使用的 SqlTransaction 有关的问题。在我的谷歌搜索中,我看到很多人使用带有 SqlTransaction 的 using 语句。
将这种类型的语句与 SqlTransaction 一起使用有什么好处和/或区别?
using (SqlConnection cn = new SqlConnection())
{
using (SqlTransaction tr = cn.BeginTransaction())
{
//some code
tr.Commit();
}
}
目前我的代码是这样的:
SqlConnection cn = new SqlConnection(ConfigurationManager.AppSettings["T3"]);
cn.Open();
SqlTransaction tr = cn.BeginTransaction();
try
{
//some code
tr.Commit();
cn.Close();
}
catch(Exception ex)
{
tr.Rollback();
cn.Close();
throw ex;
}
一种方式相对于另一种方式的优势是什么?
最佳答案
using
语句应该在你每次创建一个实现IDisposable
的类的实例时使用在一个 block 的范围内。它确保在该实例上调用 Dispose()
方法,无论是否抛出异常。
特别是,您的代码仅捕获托管异常,然后通过抛出新异常而不是重新抛出现有异常来销毁堆栈帧。
正确的做法是:
using (SqlConnection cn = new SqlConnection(ConfigurationManager.AppSettings["T3"])) {
cn.Open();
using (SqlTransaction tr = cn.BeginTransaction()) {
//some code
tr.Commit();
}
}
请注意,如果您的类具有实现 IDisposable
的类型的实例成员,那么您的类必须自己实现 IDisposable
,并在其自己的 期间释放这些成员Dispose()
调用。
关于c# - 为什么要对 SqlTransaction 使用 using 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127830/