生活随笔
收集整理的這篇文章主要介紹了
执行多条SQL语句,执行数据库事务(可传入Sql参数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上篇博客,實例介紹了一個事務執行多條SQL語句函數(int ExecuteSqlTran(List<String> SQLStringList))點擊打開鏈接,方便之余又發現了它的缺陷——不能傳入Sql語句的參數,只能靠拼接字符串完成Sql語句,很是麻煩哈!人類是‘貪婪’滴(*^__^*) 嘻嘻……,同時也是勇于探索滴,有不可傳參的,那我想 必定就有可傳參的,這篇博客就分享一下——執行多條SQL語句,實現數據庫事務函數(可傳Sql參數)
(注:本篇博客涉及到哈希表的些許知識,就不做介紹了,用一次也就大概了解了。哪天姐姐高興,再來對哈希表來個分析? O(∩_∩)O哈哈~)
D層SqlTaskAssignInfo類:
[csharp]?view plaincopy
??? ??? ???? ?? ?? ?public?bool?AssignTask2(Entity.TaskAssignInfoEntity?enTaskAssignInfo)?? ?{?? ??????? ?????string?sql1?=?"update?T_TaskAssignInfo?set?taskDistributeState='已分配'?where?taskID=@taskID?and?distributeLevel='1'";?? ????? ??????? ?????string?sql2?=?"insert?into?T_TaskAssignInfo(taskID,groupID,memberID,memberName,distributeDate,distributeTime,distributeLevel,submitState)???
[csharp]?view plaincopy
values?(@taskID,@groupID,@memberID,@memberName,@distributeDate,@distributeTime,?'2','未提交')";?? ??????????? ???????????? ?????????????? ????????????SqlParameter[]?parameters?={new?SqlParameter?("@taskID",enTaskAssignInfo.taskID?),?? ???????????????????????????????????????new?SqlParameter("@groupID",enTaskAssignInfo.groupID),?? ???????????????????????????????????????new?SqlParameter("@memberID",enTaskAssignInfo.memberID),?? ???????????????????????????????????????new?SqlParameter("@memberName",enTaskAssignInfo.memberName?),?? ???????????????????????????????????????new?SqlParameter("@distributeDate",enTaskAssignInfo.distributeDate),?? ???????????????????????????????????????new?SqlParameter("@distributeTime",enTaskAssignInfo.distributeTime)};?? ????????????? ?????????????? ????????????Hashtable?SQLStringList=new?Hashtable?();?? ????????????SQLStringList.Add(sql1,parameters);?? ????????????SQLStringList.Add(sql2,parameters);?? ????????????? ????????????try??? ????????????{?? ????????????????DbHelperSQL.ExecuteSqlTran(SQLStringList);??? ????????????????return?true;?? ????????????}?? ?? ???????????catch(SystemException)?? ????????????{?? ???????????????return?false;?? ???????????}?? ????????}??
(注:DbHelperSQL類代碼中的ConnectionString是寫在配置文件里的數據庫連接字符串)
DbHelperSQL類:
[csharp]?view plaincopy
using?System.Configuration?'這里添加后,還必須在管理器中添加引用?? ?? public?static?string?connectionString?=?ConfigurationManager.AppSettings["ConnectionString"];?? ?? ??????????????????? ?????????? ?????????? ?????????? ????????public?static?void?ExecuteSqlTran(Hashtable?SQLStringList)?? ????????{?? ????????????using?(SqlConnection?conn?=?new?SqlConnection(connectionString))?? ????????????{?? ????????????????conn.Open();?? ????????????????using?(SqlTransaction?trans?=?conn.BeginTransaction())?? ????????????????{?? ????????????????????SqlCommand?cmd?=?new?SqlCommand();?? ????????????????????try?? ????????????????????{?? ?????????????????????????? ????????????????????????foreach?(DictionaryEntry?myDE?in?SQLStringList)?? ????????????????????????{?? ????????????????????????????string?cmdText?=?myDE.Key.ToString();?? ????????????????????????????SqlParameter[]?cmdParms?=?(SqlParameter[])myDE.Value;?? ????????????????????????????PrepareCommand(cmd,?conn,?trans,?cmdText,?cmdParms);??? ????????????????????????????int?val?=?cmd.ExecuteNonQuery();?? ????????????????????????????cmd.Parameters.Clear();??? ????????????????????????}?? ????????????????????????trans.Commit();?? ????????????????????}?? ????????????????????catch??? ????????????????????{?? ????????????????????????trans.Rollback();??? ????????????????????????throw;??? ????????????????????}?? ????????????????}?? ????????????}?? ????????}??
?
[csharp]?view plaincopy
?? ?private?static?void?PrepareCommand(SqlCommand?cmd,?SqlConnection?conn,?SqlTransaction?trans,?string?cmdText,?SqlParameter[]?cmdParms)?? ????????{?? ????????????if?(conn.State?!=?ConnectionState.Open)?? ????????????????conn.Open();?? ????????????cmd.Connection?=?conn;?? ????????????cmd.CommandText?=?cmdText;?? ????????????if?(trans?!=?null)?? ????????????????cmd.Transaction?=?trans;?? ????????????cmd.CommandType?=?CommandType.Text;?? ????????????if?(cmdParms?!=?null)?? ????????????{?? ?? ?? ????????????????foreach?(SqlParameter?parameter?in?cmdParms)??? ????????????????{?? ????????????????????if?((parameter.Direction?==?ParameterDirection.InputOutput?||?parameter.Direction?==?ParameterDirection.Input)?&&?? ????????????????????????(parameter.Value?==?null))?? ????????????????????{?? ????????????????????????parameter.Value?=?DBNull.Value;??? ????????????????????}?? ????????????????????cmd.Parameters.Add(parameter);?? ????????????????}?? ????????????}?? ????????}??
?
配置文件:
[csharp]?view plaincopy
<appSettings>???<add?key="ConnectionString"?value="server=hanxuemin;database=Library;uid=sa;pwd=123456"/>?? </appSettings>??
?
???對比上篇博客中介紹的“執行多條sql語句,實現數據庫事務(不可傳入sql參數)函數”點擊打開鏈接,體會兩個函數的優缺點,了解兩個函數在D層函數中是如何調用的,學會使用!
總結
以上是生活随笔為你收集整理的执行多条SQL语句,执行数据库事务(可传入Sql参数)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。