C#执行多条SQL写法

本文介绍如何在C#中使用事务处理执行多条SQL更新语句,确保操作的原子性和一致性,要么全部成功,要么全部回滚。
List<string> sqlList2 = new List<string>();
            List<List<SqlParameter>> values2 = new List<List<SqlParameter>>();
            sqlList.Add("update LL_Main set DelStatus='Y' where  BH=@BH" + sqlList.Count.ToString());
            values.Add(new List<SqlParameter>()
            {
                new SqlParameter("@BH"+ values.Count.ToString(),DJH),
            });

            sqlList.Add("update LL_SP set DelStatus='Y' where  YFile=@YFile" + sqlList.Count.ToString());
            values.Add(new List<SqlParameter>()
            {
                new SqlParameter("@YFile"+ values.Count.ToString(),DJH),
            });

            sqlList.Add("update ProData set DelStatus='Y' where  BH=@BH" + sqlList.Count.ToString());
            values.Add(new List<SqlParameter>()
            {
                new SqlParameter("@BH"+ values.Count.ToString(),DJH),
            });

            string str = Util.DBHelper.ExecuteSqlTran(sqlList, values);
 /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">多条SQL语句</param>		
        public static string ExecuteSqlTran(List<String> SQLStringList, List<List<SqlParameter>> parasList)
        {
            if (SQLStringList.Count != parasList.Count)
            {
                return "参数错误";
            }
            using (SqlConnection sqlCon = new SqlConnection(Util.Configure.ConnStr))
            {
                sqlCon.Open(); //打开数据库连接  
                SqlCommand cmd = new SqlCommand(); //创建SqlCommand命令  
                cmd.Connection = sqlCon; //设置命令连接  
                SqlTransaction tx = sqlCon.BeginTransaction();//开始事务  
                cmd.Transaction = tx;//设置执行命令的事务  
                try
                {
                    int count = 0;//定义int类型变量,存放该函数返回值  
                    for (int n = 0; n < SQLStringList.Count; n++)//循环传入的sql语句  
                    {
                        string strsql = SQLStringList[n]; //第n条sql语句  
                        if (strsql.Trim().Length > 1) //如果第n条sql语句不为空  
                        {
                            cmd.CommandText = strsql; //设置执行命令的sql语句  
                            foreach (SqlParameter para in parasList[n])
                            {
                                cmd.Parameters.Add(para);
                            }
                            count += cmd.ExecuteNonQuery(); //调用执行增删改sql语句的函数ExecuteNonQuery(),执行sql语句  
                        }
                    }
                    tx.Commit();//提交事务  
                    cmd.Parameters.Clear();
                    return "";  
                }
                catch (Exception ex)
                {
                    tx.Rollback();
                    return ex.Message;
                }
                finally
                {
                    sqlCon.Close();
                }
            }
        }

以上是执行3条更新语句,要么都成功,要么都失败。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值