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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

AQO.NET实现数据操作封装

發(fā)布時間:2024/10/12 asp.net 104 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AQO.NET实现数据操作封装 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

經過個人學習和項目經驗,總結關于ADO.NET實現(xiàn)數(shù)據(jù)查詢操作的方法做簡單封裝,希望喜歡的朋友點贊并收藏。話不多說,直接上代碼:

/// <summary>/// 數(shù)據(jù)庫連接字符串/// </summary>protected static string ConnectionString{get{return ConfigurationManager.ConnectionStrings["FTRTPContext"].ConnectionString;}}/// <summary>/// 數(shù)據(jù)庫實例工廠/// </summary>protected static DbProviderFactory DbProvider{get{string providerName = ConfigurationManager.ConnectionStrings["FTRTPContext"].ProviderName;return DbProviderFactories.GetFactory(providerName);}}/// <summary>/// 創(chuàng)建一個DbParameter參數(shù)對象/// </summary>/// <param name="parameterName">參數(shù)名稱</param>/// <param name="val">參數(shù)值</param>/// <returns>DbParameter對象</returns>public virtual DbParameter CreateDbParameter(string parameterName, object val){var parame = DbProvider.CreateParameter();parame.ParameterName = parameterName;parame.Value = val;return parame;}/// <summary>/// 創(chuàng)建一個DbParameter參數(shù)對象/// </summary>/// <param name="parameterName">參數(shù)名稱</param>/// <param name="dbType">參數(shù)類型</param>/// <param name="dbSize">參數(shù)大小(字節(jié)),short/Int16=2;float/int/Int32=4;double/long/Int64=8;decimal=16;string類型按照字符長度而定</param>/// <param name="val">參數(shù)值</param>/// <returns>DbParameter對象</returns>public virtual DbParameter CreateDbParameter(string parameterName, DbType dbType, int dbSize, object val){var parame = DbProvider.CreateParameter();parame.ParameterName = parameterName;parame.DbType = dbType;parame.Size = dbSize;parame.Value = val;return parame;}/// <summary>/// 執(zhí)行非查詢操作(添加/修改/刪除)/// </summary>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParms">參數(shù)數(shù)組</param>/// <returns>操作影響行數(shù)</returns>public virtual int ExecuteNonQuery(string sqlString, params DbParameter[] cmdParms){using (var conn = DbProvider.CreateConnection()){conn.ConnectionString = ConnectionString;using (var cmd = PrepareCommand(conn, sqlString, cmdParms)){int rows = cmd.ExecuteNonQuery();cmd.Parameters.Clear();return rows;}}}/// <summary>/// 執(zhí)行sql查詢,返回第一行第一列/// </summary>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParms">參數(shù)數(shù)組</param>/// <returns>第一行第一列的值</returns>public virtual object ExecuteScalar(string sqlString, params DbParameter[] cmdParms){using (DbConnection conn = DbProvider.CreateConnection()){conn.ConnectionString = ConnectionString;using (DbCommand cmd = PrepareCommand(conn, sqlString, cmdParms)){object obj = cmd.ExecuteScalar();cmd.Parameters.Clear();conn.Close();return obj;}}}/// <summary>/// 執(zhí)行sql查詢,返回第一行第一列(泛型)/// </summary>/// <typeparam name="TSource">返回的值類型</typeparam>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParms">參數(shù)數(shù)組</param>/// <returns>第一行第一列的值</returns>public virtual TSource ExecuteScalar<TSource>(string sqlString, params DbParameter[] cmdParms) where TSource : struct{object obj = ExecuteScalar(sqlString, cmdParms);if ((Object.Equals(obj, null)) || (Object.Equals(obj, DBNull.Value))){return default(TSource);}return typeof(TSource) == obj.GetType() ? (TSource)obj : (TSource)Convert.ChangeType(obj, typeof(TSource));}/// <summary>/// 執(zhí)行sql查詢,返回DataReader/// </summary>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParms">參數(shù)數(shù)組</param>/// <returns>DbDataReader對象</returns>public virtual DbDataReader ExecuteReader(string sqlString, params DbParameter[] cmdParms){var conn = DbProvider.CreateConnection();try{conn.ConnectionString = ConnectionString;var cmd = PrepareCommand(conn, sqlString, cmdParms);var myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);cmd.Parameters.Clear();return myReader;}catch (DbException ex){conn.Close();throw ex;}}/// <summary>/// 執(zhí)行sql查詢,返回DataReader/// </summary>/// <param name="dataReaderCallback">委托方法,讀取DataReader</param>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParms">參數(shù)數(shù)組</param>public virtual void ExecuteReader(Action<DbDataReader> dataReaderCallback, string sqlString, params DbParameter[] cmdParms){using (var conn = DbProvider.CreateConnection()){conn.ConnectionString = ConnectionString;var cmd = PrepareCommand(conn, sqlString, cmdParms);var myReader = cmd.ExecuteReader();cmd.Parameters.Clear();dataReaderCallback(myReader);myReader.Dispose();}}/// <summary>/// 執(zhí)行sql查詢,返回DataSet/// </summary>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParms">參數(shù)數(shù)組</param>/// <returns>DataSet對象</returns>public virtual DataSet ExecuteDataSet(string sqlString, params DbParameter[] cmdParms){using (var conn = DbProvider.CreateConnection()){conn.ConnectionString = ConnectionString;using (var cmd = PrepareCommand(conn, sqlString, cmdParms)){using (var adapter = DbProvider.CreateDataAdapter()){adapter.SelectCommand = cmd;var ds = new DataSet();adapter.Fill(ds);return ds;}}}}/// <summary>/// 以事務形式執(zhí)行多條語句的批量新增或修改操作/// </summary>/// <param name="sqlStringList">sql語句</param>/// <returns>事務是否執(zhí)行成功</returns>public virtual bool ExecuteSqlTran(List<string> sqlStringList){var cmd = DbProvider.CreateCommand();try{cmd.Connection = DbProvider.CreateConnection();cmd.Connection.ConnectionString = ConnectionString;cmd.Connection.Open();cmd.CommandType = CommandType.Text;cmd.Transaction = cmd.Connection.BeginTransaction();foreach (var sqlString in sqlStringList){cmd.CommandText = sqlString;cmd.ExecuteNonQuery();}cmd.Transaction.Commit();return true;}catch{cmd.Transaction.Rollback();return false;}finally{cmd.Connection.Close();}}/// <summary>/// 以事務形式執(zhí)行同一個語句的批量新增或修改操作/// </summary>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParams">參數(shù)數(shù)組</param>/// <returns>事務是否執(zhí)行成功</returns>public virtual bool ExecuteSqlTran(string sqlString, List<DbParameter[]> cmdParams){var cmd = DbProvider.CreateCommand();try{cmd.Connection = DbProvider.CreateConnection();cmd.Connection.ConnectionString = ConnectionString;cmd.Connection.Open();cmd.CommandText = sqlString;cmd.CommandType = CommandType.Text;cmd.Transaction = cmd.Connection.BeginTransaction();foreach (DbParameter[] parames in cmdParams){cmd.Parameters.AddRange(parames);cmd.ExecuteNonQuery();cmd.Parameters.Clear();}cmd.Transaction.Commit();return true;}catch{cmd.Transaction.Rollback();return false;}finally{cmd.Connection.Close();}}/// <summary>/// 以事務形式執(zhí)行同一個語句的批量新增或修改操作/// </summary>/// <param name="sqlStringWithParames">參數(shù)化sql語句以及參數(shù)數(shù)組</param>/// <returns>事務是否執(zhí)行成功</returns>public virtual bool ExecuteSqlTran(Dictionary<string, List<DbParameter[]>> sqlStringWithParames){var cmd = DbProvider.CreateCommand();try{cmd.Connection = DbProvider.CreateConnection();cmd.Connection.ConnectionString = ConnectionString;cmd.Connection.Open();cmd.CommandType = CommandType.Text;cmd.Transaction = cmd.Connection.BeginTransaction();foreach (var sqlString in sqlStringWithParames.Keys){cmd.CommandText = sqlString;List<DbParameter[]> paramesList = sqlStringWithParames[sqlString];cmd.Parameters.AddRange(paramesList[0]);cmd.ExecuteNonQuery();for (var i = 1; i < paramesList.Count; i++){DbParameter[] parames = paramesList[i];for (var j = 0; j < parames.Length; j++){cmd.Parameters[j].Value = parames[j].Value;}cmd.ExecuteNonQuery();}cmd.Parameters.Clear();}cmd.Transaction.Commit();return true;}catch{cmd.Transaction.Rollback();return false;}finally{cmd.Connection.Close();}}/// <summary>/// 表值參數(shù)保存數(shù)據(jù)/// </summary>/// <param name="dt"></param>/// <param name="sqlStatement"></param>/// <param name="tableName"></param>/// <returns></returns>public virtual bool ExecuteSqlBulk(DataTable dt, string sqlStatement, string tableName){var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["FTRTPContext"].ConnectionString);var cmd = new SqlCommand(sqlStatement, sqlConn);var catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);catParam.SqlDbType = SqlDbType.Structured;//表值參數(shù)的名字叫BulkUdt,在上面的建立測試環(huán)境的SQL中有。 catParam.TypeName = tableName;// "dbo.BulkUdt";try{sqlConn.Open();if (dt != null && dt.Rows.Count != 0){cmd.ExecuteNonQuery();}}catch (Exception ex){throw ex;}finally{sqlConn.Close();}return true;}/// <summary>/// 初始化DbCommand對象/// </summary>/// <param name="conn">數(shù)據(jù)庫連接</param>/// <param name="sqlString">參數(shù)化sql語句</param>/// <param name="cmdParms">參數(shù)數(shù)組</param>/// <returns>DbCommand對象</returns>protected DbCommand PrepareCommand(DbConnection conn, string sqlString, params DbParameter[] cmdParms){if (conn.State != ConnectionState.Open){conn.Open();}DbCommand cmd = DbProvider.CreateCommand();cmd.Connection = conn;cmd.CommandText = sqlString;cmd.CommandType = CommandType.Text;if (cmdParms != null){foreach (DbParameter parm in cmdParms){cmd.Parameters.Add(parm);}}return cmd;}/// <summary>/// 分頁查詢數(shù)據(jù)(公共)/// </summary>/// <param name="strSql">查詢語句</param>/// <param name="order">分頁排序</param>/// <param name="pageSize">每頁顯示記錄數(shù)</param>/// <param name="pageIndex">當前第幾頁</param>/// <param name="record">總記錄數(shù)</param>/// <returns>DbDataReader對象</returns>public abstract DataSet SelectPageingPublic(string strSql, string order, int pageSize, int pageIndex, out int record);

對于目前需要處理的數(shù)據(jù)庫操作基本都在了吧,有不清楚的可以留言探討。

最后一個抽象方法實現(xiàn)如下所示:

/// <summary>/// 分頁查詢數(shù)據(jù)(公用)/// </summary>/// <param name="strSql">表名稱</param>/// <param name="order">分頁排序</param>/// <param name="pageSize">每頁顯示記錄數(shù)</param>/// <param name="pageIndex">當前第幾頁</param>/// <param name="record">總記錄數(shù)</param>/// <returns>DbDataReader對象</returns>public override DataSet SelectPageingPublic(string strSql, string order, int pageSize, int pageIndex, out int record){if (!string.IsNullOrEmpty(order) && order.IndexOf("order by", StringComparison.Ordinal) < 0){order = "order by " + order;}var countSql = string.Format("select count(1) from ({0}) e", strSql);//查詢總數(shù)record = ExecuteScalar<int>(countSql);var offsetCount = (pageIndex - 1) * pageSize;const string sqlTemplate = "select * from (select row_number() over({1}) as rowno, * from ({0})e ) f where rowno>{3} and rowno<=({2}+{3}) {1} ";var sqlSelectData = string.Format(sqlTemplate, strSql, order, pageSize, offsetCount);return ExecuteDataSet(sqlSelectData);}

  希望對您的學習和工作有幫助,喜歡的點贊哈。

轉載于:https://www.cnblogs.com/fqzhong2007/p/8336594.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的AQO.NET实现数据操作封装的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲成人高清在线 | 偷拍老头老太高潮抽搐 | www日韩在线观看 | 久久综合中文 | 国精产品乱码一区一区三区四区 | 麻豆毛片 | 永久av | 国产成人毛毛毛片 | 久久久不卡 | 91美女片黄在线观看 | av一级| 羞辱极度绿帽vk | 日韩精品在线不卡 | 色欲av永久无码精品无码蜜桃 | 午夜在线观看视频18 | 亚洲色在线视频 | 亚洲毛片a | 久久三区| 99视频国产精品免费观看a | av在线.com| 国产精品久久久影院 | 1024日韩| 欧美视频在线免费 | 天天舔天天射天天干 | 樱花影院最新免费观看攻略 | 一区久久| www一区二区 | 夜夜伊人| av福利在线观看 | 国产成人无码精品久久久久久 | 久久久一级片 | 国产伦一区二区 | 亚洲激情在线观看 | a一级视频 | 天天撸夜夜操 | 青青草成人免费 | 亚洲天堂日韩在线 | 午夜片在线 | 青草伊人网 | 国产午夜精品视频 | 日本网站在线播放 | 国产调教在线观看 | 91精品国产99| 国产精品久久久久久久久久久久久久久久久 | 免费网站看av | 日韩在线精品强乱中文字幕 | 亚洲热在线观看 | 日本少妇性高潮 | 亚洲国产综合久久 | 免费的av网址 | 成人福利一区二区三区 | 日韩精品一区在线观看 | 亚洲视频一区二区在线观看 | 一级做a爰片久久毛片 | 久久久久久久久久91 | 樱花电影最新免费观看国语版 | 国产吞精囗交免费视频网站 | 国产天堂第一区 | 制服丝袜影音先锋 | 亚洲日本视频在线观看 | 日韩av导航| 精品美女一区二区 | 最近中文字幕在线中文高清版 | 国产成人av片 | 欧美五月婷婷 | 晨勃顶到尿h1v1 | 亚洲福利电影 | 日本一级网站 | 天天操天天射天天舔 | 免费看黄色一级大片 | www.夜夜| 九九自拍 | 51久久久| 日本黄色大片网站 | 在线观看日本中文字幕 | 精品亚洲精品 | www.com捏胸挤出奶 | 国产高清毛片 | 欧美精品一区二区蜜臀亚洲 | 永久免费看成人av的动态图 | 日本少妇喷水视频 | 日韩av一卡 | www视频免费在线观看 | 免费在线看a | 又黄又爽的网站 | 日韩中文av在线 | 激情亚洲网| 精品日韩在线播放 | 1024手机在线观看 | 国产美女主播 | av无毛| 欧美大屁股熟妇bbbbbb | 精品久久免费视频 | 国产欧美日韩综合精品一区二区三区 | 中文字幕日韩久久 | 91九色在线播放 | 午夜精品国产精品大乳美女 | 狠狠操狠狠 | 婷婷开心激情网 |