执行多条SQL语句,实现数据库事务(不可传入Sql参数)
来源:互联网 发布:培训机构的程序员 编辑:程序博客网 时间:2024/05/22 13:14
《图书馆维护系统》的时候我负责任务管理模块,由于一些业务有些复杂,所以想用存储过程,但是贾琳师哥说了一堆存储过程的不好,让我用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)!分享给大家。。
- 执行多条SQL语句,实现数据库事务(不可传入Sql参数)
- 执行多条SQL语句,执行数据库事务(可传入Sql参数)
- 执行多条SQL语句,执行数据库事务(可传入Sql参数)
- 执行多条SQL语句,实现数据库事务。
- 执行多条SQL语句,实现数据库事务
- 执行多条SQL语句,实现数据库事务
- 执行多条SQL语句,实现数据库事务
- C# 执行多条SQL语句,实现数据库事务(通过Hashtable存储数据) .
- c# 执行多条SQL语句,实现数据库事务 线性表 Hashtable
- 事务应用-执行多条SQL语句
- 执行多条 sql语句
- 事务执行SQL语句
- 通过jdbc连接数据库,批量执行多条SQL语句
- C# 一次执行多条SQL语句,Oracle11g数据库
- 关于 sql server 客户端执行多条sql语句事务的问题
- 执行一条sql语句update多条记录实现思路
- 执行一条sql语句update多条记录实现思路
- 【转】Spring 中jdbcTemplate 实现执行多条sql语句
- 实例:jQuery formValidator表单验证插件
- 胜利大逃亡
- 小菜鸟学 MQ(三)
- [NOI1995]石子合并
- 身份证号、姓名按照某个规则加密
- 执行多条SQL语句,实现数据库事务(不可传入Sql参数)
- 五.链式栈结构的实现程序
- 【c/c++】关于数组名的讨论
- 转发:.NET开发规范教程
- (整理)批处理文件语法
- Windows的任务调度机制
- git如何看到后建的远程分支
- UIAlertView弹出视图动画效果
- My Summary