执行多条SQL语句,实现数据库事务(不可传入Sql参数)

          《图书馆维护系统》的时候我负责任务管理模块,由于一些业务有些复杂,所以想用存储过程,但是贾琳师哥说了一堆存储过程的不好,让我用sql语句。好吧,用就用吧,但是吧,大家都知道执行多条sql语句,是需要用到事务的(保持数据一致性),存储过程中加事务我还是会滴,但是要是加在代码里,就没有用过了,怎么"避免"代码里用事务呢?嘿嘿,潜心研究发现了这个——“执行多条SQL语句,实现数据库事务(自定义的函数,写在SqlHelper里,D层调用方便)”

分享给大家!!

分两篇博客来写:

第一篇:无参事务函数

第二篇:有参事务函数

 

D层SqlTaskAssignInfo类:(些许涉及到“泛型”的知识,若有兴趣,请访问我的博客:泛型)

using System.Collections.Generic; //韩学敏添加的引用,使用了 List<string> lstOne = new List<string>(){ sql1, sql2 };

         /// <summary>
        /// 组长分配任务(更新任务信息表T_TaskInfo和任务分配表T_TaskAssignInfo)
         /// </summary>
        /// <param name="modelTaskAssignInfo">
        /// 任务分配信息实体类(任务ID、小组ID、成员ID、成员姓名、组长分配日期、组长分配时间)
        /// </param>
        /// <returns>bool(true:分配成功;false:分配失败)</returns>
        public bool AssignTask2(Entity.TaskAssignInfoEntity enTaskAssignInfo)
        {
            //1,sql1语句:根据任务ID和分配等级,更新任务分配信息表T_TaskAssignInfo中任务分配状态字段taskDistributeState的值为‘已分配’
            string sql1 = "update T_TaskAssignInfo set taskDistributeState='已分配' where taskID='" + enTaskAssignInfo.taskID + "' and distributeLevel='1'";
            //2,sql2语句:向任务分配信息表中插入一条组长分配的任务信息,包括(任务ID,小组ID,成员ID,成员姓名、分配日期、分配时间、分配等级、提交状态)
            string sql2 = "insert into T_TaskAssignInfo(taskID,groupID,memberID,memberName,distributeDate,distributeTime,distributeLevel,submitState) values(" + enTaskAssignInfo.taskID + ',' + enTaskAssignInfo.groupID + ',' + enTaskAssignInfo.memberID + ',' + "'" + enTaskAssignInfo.memberName
 + "'" + ',' + "'" + enTaskAssignInfo.distributeDate + "'" + ',' + "'" + enTaskAssignInfo.distributeTime 
+ "'" + ',' + "'" + '2' + "','未提交'" + ")";

            List<string> lstSql = new List<string>() { sql1, sql2 };//泛型集合(此泛型集合只接受字符串类型):sql1、sql2

            int rows = DbHelperSQL.ExecuteSqlTran(lstSql);//调用DbHelperSQL类的ExecuteSqlTran()函数(执行多条sql语句,完成数据库事务)

            if (rows > 0)//如果几条sql语句均执行成功
            {
                return true;//返回值为true
            }
            else//如果执行失败
            {
                return false;//返回值为false
            }
        }

 

注:DbHelperSQL类代码中的ConnectionString是写在配置文件里的数据库连接字符串)

DbHelperSQL类:

using System.Configuration '这里添加后,还必须在管理器中添加引用

public static string connectionString = ConfigurationManager.AppSettings["ConnectionString"];

        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
         /// </summary>
        /// <param name="SQLStringList">多条SQL语句</param>		
        public static int ExecuteSqlTran(List<String> SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open(); //打开数据库连接
                SqlCommand cmd = new SqlCommand(); //创建SqlCommand命令
                cmd.Connection = conn; //设置命令连接
                SqlTransaction tx = conn.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语句
                            count += cmd.ExecuteNonQuery(); //调用执行增删改sql语句的函数ExecuteNonQuery(),执行sql语句
                        }
                    }
                    tx.Commit();//提交事务
                    return count;//返回受影响行数
                }
                catch
                {
                    tx.Rollback();
                    return 0;
                }
            }
        }

 

配置文件:

<appSettings>   <add key="ConnectionString" value="server=hanxuemin;database=Library;uid=sa;pwd=123456"/>
</appSettings>

 

总结:观察D层SqlTaskAssignInfo类,组长分配任务函数AssignTask2()中的两条sql语句,有没有觉得通过拼接字符串获得sql语句看起来很是复杂,而且如果sql语句很长,涉及到的参数很多的话,拼接起来很麻烦,拼错的可能极大,是不是很想用参数??下篇博客将介绍有参的事务函数ExecuteSqlTran(Hashtable SQLStringList)!分享给大家。。
 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值