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

 

你可能感兴趣的:(ado.net)