c# - SQL 连接和事务

标签 c# sql-server transactions database-connection

是否必须在事务期间保持(同一)SQL 连接打开,是否必须在调用 BeginTransaction 的同一连接上调用 CommitTransaction 和 RollbackTransaction。

我们有一个数据库帮助程序类,其中包含开始、提交和回滚事务的方法,以及通常的选择、执行存储过程等。

辅助类看起来或多或少像这样:

public class DatabaseHelper
{
    public void BeginTransaction()
    {
         // open connection, but dont close it.
    }

    public void CommitTransaction()
    {
         // close the connection
    }

    public void RollbackTransaction()
    {
         // close the connection
    }

因此,我们不能做通常的事情(我更喜欢这样做),例如:

using (sqlCon = new SqlConnection(connectionString))
{
    // sql operations here
}

当前,只要存在现有事务,帮助程序类就会使连接保持打开状态,并在提交或回滚期间将其关闭。然而,这让我想知道这是否真的是最好的方法?连接是否必须在事务期间保持打开状态?

最佳答案

是的,它必须保持开放。您可以处理您的类的 OnDispose 和其中的连接的 Dispose。

public class DatabaseHelper : IDisposable
{
    public void Dispose()
    {
        //close/dispose connection here
    }
}

那么你可以做...

using(DatabaseHelper db = new DatabaseHelper())
{
}

关于c# - SQL 连接和事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7204989/

相关文章:

c# - 我应该如何处理 Nancy 的身份验证?

c# - 如何使用正则表达式匹配类似 CSV 的字符串中的数字和数字范围?

sql - 如何在 UPDATE 语句的集合列表中使用聚合

sql - 更改存储过程显示 `Argument data type ntext is invalid for argument 1 of left function` 错误

mysql - 我如何知道我的表是事务表还是锁表?

c# - 在事务中使用 SqlCommand 时,我应该调用 Parameters.Clear 吗?

c# - 以编程方式重命名计算机

c# - 如何让弹出窗口与其来源页面保持相同的逻辑?

sql - 在 In 子句中传递时获取不在表中的记录?

java - 我可以将 Hibernate 与 JTA 一起使用吗?