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的时候遇到错误,会自动回滚。

    评论

报告相同问题?

悬赏问题

  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决