数据库操作方式:ADO.NET、微软企业库AdoHelper的封装 事务以及查询方法的区别 问题。 5C
  1. ADO.NET 方式加事务
    public DataTable GetUsers()
    {
    SqlTransaction trans = null;
    SqlConnection con = new Sqlconnection("数据库连接语句");
    try
    {
    con.Open();
    trans = con.BeginTransaction();
    SqlCommand com = new SqlCommand();

    com.CommandText = @"数据库语句 条件=@变量";
    SqlParameter para = new SqlParameter("变量","值");
    com.Parameters.Add(para);
    com.CommandText=com.CommandText;

    com.Connection=con;
    com.Transaction=trans;
    com.ExecuteNonQuery();//执行方式自己选择
    trans.Commit();//执行提交事务

    }catch
    {
    trans.Rollback();//如果前面有异常则事务回滚
    }
    finally
    {
    con.Close();
    }
    }

    2.企业库方式加事务
    Database db = CreateDatabase();
    SqlConnection con = new Sqlconnection("数据库连接语句");
    SqlTransaction trans = connection.BeginTransaction();
    result = db.ExecuteNonQuery(command, trans)

企业库封装方法

public virtual int ExecuteNonQuery(DbCommand command, DbTransaction transaction);

问题:
1.企业库的方式是不是我们只需传入事务对象 事务的提交和回滚它会帮我们自动完成 是否是将其封装到ExecuteNonQuery(command, trans)这个方法内部了 如果不是这样 那么为什么要传入一个事务对象 以及是否在返回结果后自动帮我们关闭连接释放资源

2.如果企业库没有帮我们自动完成事务的提交与回滚,那么我们要加事务的话还得想ADO.NET的方式在ExecuteNonQuery(command, trans)这个方法调用后 再添加提交事务和回滚事务的代码 该怎么写

1个回答

回答你这个问题最直接的方式就是找源代码来看:
https://github.com/MicrosoftArchive/data-access-application-block/blob/master/source/Src/Data/Database.cs
ExecuteNonQuery调用了PrepareCommand,里面有command.Transaction = transaction;
而ADO.NET在调用ExecuteNonQuery的时候遇到错误,会自动回滚。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!