国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

OracleHelper(對增刪改查分頁查詢操作進行了面向?qū)ο蟮姆庋b,對批量增刪改操作的事務封裝)

2019-11-17 01:47:02
字體:
來源:轉載
供稿:網(wǎng)友

OracleHelper(對增刪改查分頁查詢操作進行了面向?qū)ο蟮姆庋b,對批量增刪改操作的事務封裝)

公司的一個新項目使用asp.net MVC開發(fā),經(jīng)理讓我寫個OracleHelper,我從網(wǎng)上找了一個比較全的OracleHelper類,缺點是查詢的時候返回DataSet,數(shù)據(jù)增刪改要寫很多代碼(當然,可以用代碼生成器,不過配套的代碼生成器暫時沒有);又從網(wǎng)上找了一個封裝了泛型方法的OracleHelper類,整合到一起,但貌似數(shù)據(jù)增刪改查依然不方便;于是花了兩天時間,在原有基礎上對增刪改查分頁查詢操作進行了面向?qū)ο蟮姆庋b,并且對批量增刪改操作進行事務封裝,寫事務代碼更方便。

原理:

1、利用反射對增刪改查進行面向?qū)ο蟮姆庋b

2、事務:如果沒有開啟事務(沒有調(diào)用OracleHelper類的BeginTransaction方法),則按原來的方法創(chuàng)建連接,操作數(shù)據(jù)庫,然后關閉連接;如果開啟了事務(調(diào)用了OracleHelper類的BeginTransaction方法),則一次Http請求使用同一個OracleConnection,增刪改操作后不關閉連接,先提交事務,事務提交后才關閉連接,下次Http請求再重新創(chuàng)建一個OracleConnection。

說明:

OracleHelper類包含如下功能:

1、基礎方法(執(zhí)行簡單SQL語句;執(zhí)行帶參數(shù)的SQL語句;存儲過程操作;)

2、擴展方法(泛型方法)

3、增刪改查(封裝了增刪改查分頁查詢操作;查詢主表數(shù)據(jù)時,關聯(lián)表數(shù)據(jù)作為主表的類的屬性直接查詢出來,而不只是關聯(lián)表數(shù)據(jù)的ID;添加操作,關聯(lián)表數(shù)據(jù)和主表數(shù)據(jù)要分別添加(使用事務確保一致性);刪除操作,關聯(lián)表數(shù)據(jù)和主表數(shù)據(jù)要分別刪除(使用事務確保一致性);修改操作,如果關聯(lián)表的是新增的(即ID變了),要先添加關聯(lián)表數(shù)據(jù),再更新主表數(shù)據(jù),如果關聯(lián)表不是新增的(即ID沒變),則只需要更新主表,方法中會自動更新關聯(lián)表(關聯(lián)表如果還有關聯(lián)表也支持))

4、事務

代碼:

OracleHelper.cs:

using System;using System.Collections;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Data.OracleClient;using System.Linq;using System.Reflection;using System.Text;using System.xml.Linq;using Models;using System.Web;namespace DBUtil{    /// <summary>    /// Oracle操作類    /// 2014年9月25日    /// 寫程序之前,首先引用System.Data.OracleClient    /// </summary>    public class OracleHelper    {        #region 變量        /// <summary>        /// 數(shù)據(jù)庫連接字符串        /// </summary>        public static string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();        #endregion        #region 事務的OracleConnection        #region 數(shù)據(jù)庫連接對象        /// <summary>        /// 獲取打開的數(shù)據(jù)庫連接對象        /// </summary>        public static OracleConnection GetOpenConnection()        {            OracleConnection connection = null;            string key = "Simpo_FQD_OracleConnection";            if (HttpContext.Current.Items[key] == null)            {                connection = new OracleConnection(connectionString);                connection.Open();                HttpContext.Current.Items[key] = connection;            }            else            {                connection = (OracleConnection)HttpContext.Current.Items[key];            }            return connection;        }        #endregion        #region 事務對象        /// <summary>        /// 獲取事務對象        /// </summary>        public static OracleTransaction GetTran()        {            OracleTransaction tran = null;            string key = "Simpo_FQD_OracleTransaction";            if (HttpContext.Current.Items[key] == null)            {                tran = GetOpenConnection().BeginTransaction();                HttpContext.Current.Items[key] = tran;            }            else            {                tran = (OracleTransaction)HttpContext.Current.Items[key];            }            return tran;        }        #endregion        #region 開起事務標志        /// <summary>        /// 事務標志        /// </summary>        PRivate static string tranFlagKey = "Simpo_FQD_OracleTransaction_Flag";        /// <summary>        /// 添加事務標志        /// </summary>        public static void AddTranFlag()        {            HttpContext.Current.Items[tranFlagKey] = true;        }        /// <summary>        /// 移除事務標志        /// </summary>        public static void RemoveTranFlag()        {            HttpContext.Current.Items[tranFlagKey] = false;        }        /// <summary>        /// 事務標志        /// </summary>        public static bool TranFlag        {            get            {                bool tranFlag = false;                if (HttpContext.Current.Items[tranFlagKey] != null)                {                    tranFlag = (bool)HttpContext.Current.Items[tranFlagKey];                }                return tranFlag;            }        }        #endregion        #endregion        #region 基礎方法        #region 公用方法        #region GetMaxID        /// <summary>        /// 不支持多用戶并發(fā),慎用,請使用GetNextID方法        /// </summary>        private static int GetMaxID(string fieldName, string tableName)        {            string strsql = "select max(" + fieldName + ")+1 from " + tableName;            object obj = OracleHelper.GetSingle(strsql);            if (obj == null)            {                return 1;            }            else            {                return int.Parse(obj.ToString());            }        }        #endregion        #region Exists        public static bool Exists(string strSql, params OracleParameter[] cmdParms)        {            object obj = OracleHelper.GetSingle(strSql, cmdParms);            int cmdresult;            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))            {                cmdresult = 0;            }            else            {                cmdresult = int.Parse(obj.ToString());            }            if (cmdresult == 0)            {                return false;            }            else            {                return true;            }        }        #endregion        #endregion        #region  執(zhí)行簡單SQL語句        #region Exists        public static bool Exists(string SQLString)        {            using (OracleConnection connection = new OracleConnection(connectionString))            {                using (OracleCommand cmd = new OracleCommand(SQLString, connection))                {                    try                    {                        connection.Open();                        object obj = cmd.ExecuteScalar();                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))                        {                            return false;                        }                        else                        {                            return true;                        }                    }                    catch (System.Data.OracleClient.OracleException e)                    {                        connection.Close();                        throw new Exception(e.Message);                    }                    finally                    {                        cmd.Dispose();                        connection.Close();                    }                }            }        }        #endregion        #region 執(zhí)行SQL語句,返回影響的記錄數(shù)        /// <summary>        /// 執(zhí)行SQL語句,返回影響的記錄數(shù)        /// </summary>        /// <param name="SQLString">SQL語句</param>        /// <returns>影響的記錄數(shù)</returns>        public static int ExecuteSql(string SQLString)        {            OracleConnection connection = GetOpenConnection();            using (OracleCommand cmd = new OracleCommand(SQLString, connection))            {                try                {                    if (TranFlag) cmd.Transaction = GetTran();                    int rows = cmd.ExecuteNonQuery();                    return rows;                }                catch (System.Data.OracleClient.OracleException E)                {                    connection.Close();                    throw new Exception(E.Message);                }                finally                {                    cmd.Dispose();                    if (!TranFlag) connection.Close();                }            }        }        #endregion        #region 執(zhí)行多條SQL語句,實現(xiàn)數(shù)據(jù)庫事務        /// <summary>        /// 執(zhí)行多條SQL語句,實現(xiàn)數(shù)據(jù)庫事務。        /// </summary>        /// <param name="SQLStringList">多條SQL語句</param>          public static bool ExecuteSqlTran(ArrayList SQLStringList)        {            bool re = false;            using (OracleConnection connection = new OracleConnection(connectionStrin
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泌阳县| 繁峙县| 灵石县| 永吉县| 孝义市| 永丰县| 山阳县| 读书| 景宁| 平罗县| 穆棱市| 台安县| 航空| 永平县| 长沙县| 宁安市| 竹北市| 长寿区| 东乌珠穆沁旗| 延边| 时尚| 巍山| 镇远县| 沈丘县| 宜昌市| 进贤县| 青州市| 刚察县| 镇坪县| 长葛市| 洪泽县| 云梦县| 南皮县| 淮南市| 库尔勒市| 久治县| 邵武市| 外汇| 通山县| 连云港市| 屯昌县|