ado.net执行多条语句,使用事务
执行多条非查询语句,使用事务,可放在SqlHelp类。
笔记,只是自己看,高手请绕过。。。
protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack) { Hashtable htb = new Hashtable(); string cmdText = "insert into Table1 values(@a,@b)"; SqlParameter[] pars ={ new SqlParameter("@a", "10"), new SqlParameter("@b", "小二") }; //键值对,键为执行语句(非查询),值为参数 htb.Add(cmdText, pars); string cmdText2 = "insert into Table2 values(@a,@b,@c)"; SqlParameter[] pars2 ={ new SqlParameter("@a", "10"), new SqlParameter("@b", "应该是日期值"), new SqlParameter("@c", "100") }; htb.Add(cmdText2, pars2); bool bo = Test(htb); if (bo) { Response.Write("成功!"); } else { Response.Write("失败!"); } } } //类,参数Hashtable表,返bool值 public static bool Test(Hashtable htb) { using (SqlConnection conn = new SqlConnection("server=1;database=2;uid=3;pwd=4")) { conn.Open(); //声明事务 SqlTransaction tr = conn.BeginTransaction(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; //指定给SqlCommand事务 comm.Transaction = tr; try { //遍历Hashtable数据,每次遍历执行SqlCommand foreach (DictionaryEntry de in htb) { string cmdText = de.Key.ToString(); SqlParameter[] pars = (SqlParameter[])de.Value; //指定执行语句 comm.CommandText = cmdText; //有参数则进行添加 if (pars != null) { foreach (SqlParameter par in pars) { comm.Parameters.Add(par); } } //执行 comm.ExecuteNonQuery(); //使用后清空参数,为下次使用 comm.Parameters.Clear(); } //不出意外事务提前,返回True tr.Commit(); return true; } catch (Exception) { //出意外事务回滚,返回Fasle tr.Rollback(); return false; } } }?