读书人

ado.net施行多条语句使用事务

发布时间: 2012-10-07 17:28:51 作者: rapoo

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;            }        }    }

?

读书人网 >编程

热点推荐