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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

打造 通用的 支持多数据库 操作的 DBHelper

發布時間:2024/8/26 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打造 通用的 支持多数据库 操作的 DBHelper 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閑來無事,寫一個通用的直持多數據庫的DBHelper,支持單連接批量執行SQL

因為用了TransactionScope所以請引用System.TransactionScope.dll

代碼尚未測試,請不要在生產環境中使用,后續會用測試好的代碼替換,并會持續支持,歡迎大家一起學習

歡迎加入 QQ群一起學習?254082423

廢話不多說直接上代碼

using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Utility {internal class DbObject{/// <summary>/// 腳本/// </summary>internal string CommandText{get;set;}/// <summary>/// 腳本參數集/// </summary>internal IList<IDbDataParameter> DbParameters{get;}} }

?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Transactions;namespace Utility {internal class DBHelper<T> where T : class, IDbConnection, new(){/// <summary>/// 裝載參數/// </summary>/// <param name="command"></param>/// <param name="parameters"></param>private void PrepareDbParameters(IDbCommand command, IDbDataParameter[] parameters){if (Equals(command, null))throw new Exception("Command對象不能為空");foreach (var item in parameters)command.Parameters.Add(item);}private void PrepareDbParameters(IDbCommand command, IList<IDbDataParameter> parameters){if (Equals(command, null))throw new Exception("Command對象不能為空");foreach (var item in parameters)command.Parameters.Add(item);}/// <summary>/// 執行查詢/// </summary>/// <typeparam name="U"></typeparam>/// <param name="connectionString">連接字符串</param>/// <param name="commandText">查詢語句</param>/// <param name="parameters">查詢參數</param>/// <returns>數據集</returns>internal DataSet ExecuteQuery<U>(string connectionString, CommandType commandType, string commandText,IDbDataParameter[] parameters)where U : class, IDbDataAdapter, new(){using (IDbConnection conn = new T()){conn.ConnectionString = connectionString;IDbCommand command = conn.CreateCommand();command.CommandType = commandType;command.CommandText = commandText;this.PrepareDbParameters(command, parameters);using (var ds = new DataSet()){IDbDataAdapter adapter = new U();adapter.SelectCommand = command;adapter.Fill(ds);return ds;}}}/// <summary>/// 執行查詢/// </summary>/// <param name="connectionString">連接字符串</param>/// <param name="commandType">腳本類型</param>/// <param name="commandText">執行的腳本</param>/// <param name="parameters">執行參數</param>/// <param name="behavior">查詢結果行為</param>/// <returns></returns>internal IDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText,IDbDataParameter[] parameters, CommandBehavior behavior){using (IDbConnection conn = new T()){conn.ConnectionString = connectionString;IDbCommand command = conn.CreateCommand();command.CommandType = commandType;command.CommandText = commandText;this.PrepareDbParameters(command, parameters);if (conn.State == ConnectionState.Broken)conn.Close();if (conn.State != ConnectionState.Open)conn.Open();using (var reader = command.ExecuteReader(behavior)){return reader;}}}/// <summary>/// 執行SQL/// </summary>/// <param name="connectionString"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <param name="parameters"></param>internal U ExecuteScalar<U>(string connectionString, CommandType commandType, string commandText,IDbDataParameter[] parameters)where U : struct{using (IDbConnection conn = new T()){conn.ConnectionString = connectionString;IDbCommand command = conn.CreateCommand();command.CommandType = commandType;command.CommandText = commandText;this.PrepareDbParameters(command, parameters);if (conn.State == ConnectionState.Broken)conn.Close();if (conn.State != ConnectionState.Open)conn.Open();var result = (U)command.ExecuteScalar();conn.Close();return result;}}/// <summary>/// 批量執行SQL/// </summary>/// <param name="connectionString"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <param name="parameters"></param>/// <param name="behavior"></param>/// <returns></returns>internal IList<U> ExecuteScalarBatch<U>(string connectionString, CommandType commandType, IList<DbObject> dbObjects)where U : struct{using (IDbConnection conn = new T()){using (TransactionScope trans = new TransactionScope()){IList<U> list = new List<U>();try{for (var i = 0; i < dbObjects.Count; i++){var curDbObj = dbObjects[i];conn.ConnectionString = connectionString;IDbCommand command = conn.CreateCommand();command.CommandType = commandType;command.CommandText = curDbObj.CommandText;this.PrepareDbParameters(command, curDbObj.DbParameters.ToArray());if (conn.State == ConnectionState.Broken)conn.Close();if (conn.State != ConnectionState.Open)conn.Open();var result = (U)command.ExecuteScalar();list.Add(result);trans.Complete();}}catch (Exception ex){ throw ex;}return list;}}}/// <summary>/// 執行SQL/// </summary>/// <param name="connectionString"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <param name="parameters"></param>/// <param name="behavior"></param>/// <returns></returns>internal int ExecuteNoneQuery(string connectionString, CommandType commandType, string commandText,IDbDataParameter[] parameters, CommandBehavior behavior){using (IDbConnection conn = new T()){conn.ConnectionString = connectionString;IDbCommand command = conn.CreateCommand();command.CommandType = commandType;command.CommandText = commandText;this.PrepareDbParameters(command, parameters);if (conn.State == ConnectionState.Broken)conn.Close();if (conn.State != ConnectionState.Open)conn.Open();int affectCount = command.ExecuteNonQuery();return affectCount;}}/// <summary>/// 批量執行SQL/// </summary>/// <param name="connectionString"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <param name="parameters"></param>/// <param name="behavior"></param>/// <returns></returns>internal IList<int> ExecuteNoneQueryBatch<U>(string connectionString, CommandType commandType, IList<DbObject> dbObjects){using (IDbConnection conn = new T()){using (TransactionScope trans = new TransactionScope()){IList<int> list = new List<int>();try{for (var i = 0; i < dbObjects.Count; i++){var curDbObj = dbObjects[i];conn.ConnectionString = connectionString;IDbCommand command = conn.CreateCommand();command.CommandType = commandType;command.CommandText = curDbObj.CommandText;this.PrepareDbParameters(command, curDbObj.DbParameters.ToArray());if (conn.State == ConnectionState.Broken)conn.Close();if (conn.State != ConnectionState.Open)conn.Open();var result = command.ExecuteNonQuery();list.Add(result);trans.Complete();}}catch (Exception ex){throw ex;}return list;}}}} }

?后續會放出基于該類的SqlHelper

轉載于:https://www.cnblogs.com/bygrace/p/5960968.html

總結

以上是生活随笔為你收集整理的打造 通用的 支持多数据库 操作的 DBHelper的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品欧美一区二区精品少妇 | 双性娇喘浑圆奶水h男男漫画 | 草草影院在线播放 | 亚洲一区精品视频在线观看 | 波多野结衣福利视频 | 鲁丝片一区二区三区 | 亚洲国产精品久久精品怡红院 | 亚洲精品乱码久久久久久久 | 色悠悠国产精品 | 免费黄色短片 | 欧美综合激情网 | 国产激情无码一区二区 | www.香蕉视频在线观看 | 99热免费在线 | 日本伦理一区 | 欧洲一区二区三区在线 | 亚洲激情久久久 | 日本精品视频在线播放 | 国产麻豆精品一区 | 日本不卡在线 | 欧美透逼视频 | 在线色网址 | 日韩av一区二区三区四区 | 特黄网站 | 亚洲精品乱 | 国产91清纯白嫩初高中在线观看 | 蜜臀久久99精品久久久画质超高清 | 精品无人国产偷自产在线 | 伊人色区 | 噜噜噜精品欧美成人 | 欧美 日韩 国产 一区二区三区 | 国产永久精品 | 99久久精品免费看国产 | 欧美多人猛交狂配 | 岳狂躁岳丰满少妇大叫 | 操你啦免费视频 | 日韩 中文字幕 | 三级黄色网| 国产精品久久久久9999 | 欧美freesex黑人又粗又大 | 精品日韩av | 精品国产丝袜一区二区三区乱码 | 成人网址在线观看 | 91一区| 黄色片国产 | 欧美一区二区久久久 | gogo人体做爰大胆视频 | 国产成人无码aa精品一区 | 激情av中文字幕 | 久久国产网站 | 美日韩一区二区 | 久久久999 | 久久国产精品免费 | 国产91大片| 中文自拍| av大全网站 | 影音先锋中文字幕在线播放 | 人人模人人干 | 免费黄色看片网站 | 公侵犯人妻中文字慕一区二区 | 午夜精品久久久久久久蜜桃 | 欧美熟妇久久久久 | 日韩一区在线播放 | 亚洲av无码乱码在线观看富二代 | 亚洲精品欧美精品 | 日韩免费视频一区二区视频在线观看 | 亚洲天堂精品在线 | 久久久久久久九九九九 | 日韩美一区二区 | 国产精品久久久无码一区 | 桃谷绘里香番号 | 国产a黄 | 国产精品久久久久久在线观看 | 久久亚洲精华国产精华液 | 婷婷亚洲一区 | 米奇影音 | 911亚洲精选 | 制中文字幕音影 | 免费的毛片 | 91福利视频在线观看 | 国产精品99久久久久久www | 国产大片在线观看 | 拔插拔插海外华人免费视频 | 亚洲福利网| 日本丰满少妇裸体自慰 | 乱码av| 蘑菇福利视频一区播放 | 亚洲成人av在线播放 | 大学生高潮无套内谢视频 | 麻豆国产精品 | 一区二区网 | 打美女屁股网站 | www.在线观看网站 | 欧美美女在线观看 | 亚洲av综合永久无码精品天堂 | 波多野结衣网址 | 国产精品久久久 | 久久精品国产亚洲av麻豆 | 超碰国产在线 |