日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/6/15 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 执行多条SQL语句,执行数据库事务(可传入Sql参数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇博客,實例介紹了一個事務執行多條SQL語句函數(int ExecuteSqlTran(List<String> SQLStringList))點擊打開鏈接,方便之余又發現了它的缺陷——不能傳入Sql語句的參數,只能靠拼接字符串完成Sql語句,很是麻煩哈!人類是‘貪婪’滴(*^__^*) 嘻嘻……,同時也是勇于探索滴,有不可傳參的,那我想 必定就有可傳參的,這篇博客就分享一下——執行多條SQL語句,實現數據庫事務函數(可傳Sql參數)

注:本篇博客涉及到哈希表的些許知識,就不做介紹了,用一次也就大概了解了。哪天姐姐高興,再來對哈希表來個分析? O(∩_∩)O哈哈~)

DSqlTaskAssignInfo類:

[csharp]?view plaincopy
  • ?///?<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=@taskID?and?distributeLevel='1'";??
  • ?????
  • ?????//2,sql2語句:向任務分配信息表中插入一條組長分配的任務信息,包括(任務ID,小組ID,成員ID,成員姓名、分配日期、分配時間、分配等級、提交狀態)??
  • ?????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','未提交')";??
  • ???????????
  • ????????????
  • ????????????//3,設置參數(任務ID、小組ID、成員ID、成員姓名、分配日期、分配時間)??
  • ????????????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)};??
  • ?????????????
  • ????????????//4,創建哈希表????????????????????????
  • ????????????Hashtable?SQLStringList=new?Hashtable?();??
  • ????????????SQLStringList.Add(sql1,parameters);//4.1將sql1語句,和參數添加到哈希表??
  • ????????????SQLStringList.Add(sql2,parameters);//4.2將sql2語句和參數添加到哈希表??
  • ?????????????
  • ????????????try???
  • ????????????{//5,調用DbHelperSQL類的事務函數(執行多條sql語句,完成數據庫事務)??
  • ????????????????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"];??
  • ??
  • ?????????????????///?<summary>??
  • ????????///?執行多條SQL語句,實現數據庫事務。??
  • ????????///?</summary>??
  • ????????///?<param?name="SQLStringList">SQL語句的哈希表(key為sql語句,value是該語句的SqlParameter[])</param>??
  • ????????public?static?void?ExecuteSqlTran(Hashtable?SQLStringList)??
  • ????????{??
  • ????????????using?(SqlConnection?conn?=?new?SqlConnection(connectionString))??
  • ????????????{??
  • ????????????????conn.Open();//打開數據庫連接??
  • ????????????????using?(SqlTransaction?trans?=?conn.BeginTransaction())//開始數據庫事務??
  • ????????????????{??
  • ????????????????????SqlCommand?cmd?=?new?SqlCommand();//創建SqlCommand命令??
  • ????????????????????try??
  • ????????????????????{??
  • ????????????????????????//循環??
  • ????????????????????????foreach?(DictionaryEntry?myDE?in?SQLStringList)//循環哈希表(本例中?即,循環執行添加在哈希表中的sql語句??
  • ????????????????????????{??
  • ????????????????????????????string?cmdText?=?myDE.Key.ToString();//獲取鍵值(本例中?即,sql語句)??
  • ????????????????????????????SqlParameter[]?cmdParms?=?(SqlParameter[])myDE.Value;//獲取鍵值(本例中?即,sql語句對應的參數)??
  • ????????????????????????????PrepareCommand(cmd,?conn,?trans,?cmdText,?cmdParms);?//調用PrepareCommand()函數,添加參數??
  • ????????????????????????????int?val?=?cmd.ExecuteNonQuery();//調用增刪改函數ExcuteNoQuery(),執行哈希表中添加的sql語句??
  • ????????????????????????????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;//設置執行命令的sql語句??
  • ????????????if?(trans?!=?null)//如果事務不為空??
  • ????????????????cmd.Transaction?=?trans;//設置執行命令的事務??
  • ????????????cmd.CommandType?=?CommandType.Text;//設置解釋sql語句的類型為“文本”類型(也是就說該函數不適用于存儲過程)??
  • ????????????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参数)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 免费人成在线观看网站 | 久草视 | 99精品视频在线观看免费 | 日本韩国欧美一区 | 国产精品国语 | 成人免费毛片东京热 | 欧洲黄色录像 | 免费网站观看www在线观看 | 永久免费观看av | 欧美激情一区二区在线 | www.久操| 成都免费高清电影 | 免费播放片大片 | 91精品久久久久久综合五月天 | 亚洲乱色熟女一区二区 | av在线天堂网 | 午夜色播 | 精品无码一区二区三区免费 | 91福利视频网 | 2019天天操| 亚洲成人午夜在线 | 亚洲综合av一区二区三区 | 欧美有码视频 | 三年中文在线观看免费观看 | 91亚洲视频在线观看 | 国产精品av在线播放 | 久久免费视频一区二区 | 国产免费一区二区三区视频 | 久久综合社区 | 台湾150部性三级 | 网友自拍咪咪爱 | 色丁香综合 | 国产精品19p | 色哟哟免费在线观看 | 国产成人综合亚洲 | 精品无码成人久久久久久免费 | 黄色激情毛片 | 亚洲操一操 | 欧美岛国国产 | 献给魔王伊伏洛基亚吧动漫在线观看 | 激情福利视频 | 黄色99视频 | 麻豆视频免费看 | 欧美黑人做爰爽爽爽 | 亚洲免费国产视频 | 国产一区欧美日韩 | 日韩精品视频在线播放 | 日日噜噜噜噜人人爽亚洲精品 | 天天综合日韩 | 女同在线观看 | 91秘密入口 | 大胸美女无遮挡 | 免看一级a毛片一片成人不卡 | 中文字幕一区二区三区久久久 | 黄色av网站免费看 | 中文字幕在线观看不卡 | 久操视频在线观看免费 | 国产第页| 日韩久久在线 | 国产精品日日摸夜夜爽 | 一区二区三区在线视频播放 | 97精品熟女少妇一区二区三区 | 天天舔天天射天天干 | 黄色片子视频 | 日本高清免费看 | 国产做受高潮 | 性做久久久久久久久久 | 在线看成人片 | 免费黄色在线 | 国产丰满大乳奶水在线视频 | 精品一区二区三区久久 | 麻豆视屏 | 免费网站看av | 香蕉网站在线观看 | 日本黄色片免费 | 黄色视屏在线看 | 国产伦子伦对白视频 | 怡春院一区二区 | 邵氏电影《金莲外传2》免费观看 | 嫩草影院久久 | 与亲女洗澡时伦了毛片 | 欧美日韩国产亚洲沙发 | 天天色天天插 | 色图视频| 成人性爱视频在线观看 | 欧美夜夜操 | 国产日韩精品在线观看 | 亚洲小视频在线播放 | 免费网站在线高清观看 | 人妻丰满熟妇av无码区免 | 自拍欧美亚洲 | 91影视在线观看 | 免费观看一级一片 | 免费看黄色av | 人妻无码中文字幕免费视频蜜桃 | 日本黄色美女视频 | 婷婷调教口舌奴ⅴk | 亚洲色图第一区 | 黑人干亚洲女 |