asp.net 向一个表中插入一条数据,然后向另一表中插入多条数据,这样如何使用事务解决
主表和从表是一对多的关系,并且要用事务的。怎么处理呀

解决方案 »

  1.   

    我打算用if else去执行两个方法,代替事务。不知道好不好?大伙都下班了 
      

  2.   

    插入操作用相同的Connection,让Connection启动事务。保存结束之后提交就可以了。
      

  3.   

    protected void Page_Load(object sender, EventArgs e) {
    SqlConnection connection = new SqlConnection("连接字符串");
    connection.Open();
    SqlTransaction transaction = null; A a = new A() { AName = "测试一" };
    List<B> bs = new List<B>();
    bs.Add(new B() { Bid = 1, BName = "Test1" });
    bs.Add(new B() { Bid = 2, BName = "Test2" });
    bs.Add(new B() { Bid = 3, BName = "Test3" }); try {
    // 保存A表的记录,返回关联字段值(主键或者唯一键)
    a.Aid = this.SaveA(a, transaction); // 遍历保存B表的多条记录 foreach (var b in bs) {
    b.Aid = a.Aid;
    this.SaveB(b, transaction);
    } transaction.Commit();
    }
    catch (Exception) {
    if (transaction != null) { transaction.Rollback(); }
    throw;
    }
    finally {
    if (connection != null) { connection.Close(); }
    }
    }/// <summary>
    /// 
    /// </summary>
    /// <param name="a"></param>
    /// <param name="tran"></param>
    /// <returns></returns>
    public int SaveA(A a, SqlTransaction tran) {
    SqlCommand cmd = new SqlCommand("执行插入的SQL语句或者存储过程", tran.Connection, tran);
    cmd.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
    cmd.ExecuteNonQuery(); return Convert.ToInt32(cmd.Parameters[0].Value);
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="b"></param>
    /// <param name="tran"></param>
    public void SaveB(B b, SqlTransaction tran) {
    SqlCommand cmd = new SqlCommand("执行插入的SQL语句或者存储过程", tran.Connection, tran); cmd.ExecuteNonQuery();
    }public class A {
    public int Aid { get; set; }
    public string AName { get; set; }
    }public class B {
    public int Bid { get; set; }
    public string BName { get; set; }
    public int Aid { get; set; }
    }