事务 asp.net 向一个表中插入一条数据,然后向另一表中插入多条数据,这样如何使用事务解决主表和从表是一对多的关系,并且要用事务的。怎么处理呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我打算用if else去执行两个方法,代替事务。不知道好不好?大伙都下班了 插入操作用相同的Connection,让Connection启动事务。保存结束之后提交就可以了。 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; }} ajax.method为什么只执行一行代码 html内容导出word 关于页面返回问题 排版的样式和预览样式有差别 为何 我用checkBox做批量删除时出现问题 请指教:怎样调试被ASP.NET调用的VC6 DLL? javascript的问题 Asp.net(C#)使用OleDb向Oracle存图片问题 treeview问题: 超大图片的上传及切割 Net 解析Json 一个狠狠奇怪的问题
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; }
}