Nico_Hu 2018-11-02 06:26 采纳率: 50%
浏览 1007
已结题

数据库操作方式:ADO.NET、微软企业库AdoHelper的封装 事务以及查询方法的区别 问题。

  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条回答 默认 最新

  • threenewbee 2018-11-04 12:49
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题