Dapper連接Oracle


Dapper連接Oracle
去年寫過了篇博客,名字叫:讓dapper支持Oracle

網址:http://www.cnblogs.com/ushou/archive/2012/09/28/2706905.html
有很多網友查看並評論,也引來很多網站轉載,在這里深表歉意,因為去年搞的思路是錯的,我有罪呀。
其實Dapper原生是支持Oracle的,只是去年水平有限,或者說查閱的資料還不夠多,所以“毀”人不倦。
今年7月份的時候搞出這個新的Demo,只是一直忙與工作,沒來得及分享出來,現將主要代碼寫出來吧,希望對大家有幫助。

首先創建數據庫連接,代碼如下:

    public class DapperFactory
    {
        public static readonly string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Wip_TestConnStr"].ToString();


        public static OracleConnection CrateOracleConnection()
        {
            var connection = new OracleConnection(connectionString);
            connection.Open();
            return connection;
        }

    }

 

其次,基於Oracle,實現簡單的增、刪、改、查、事務、分頁等。

using System;
using System.Collections.Generic;
using System.Linq;
using Dapper;
using Tcl.ForLog.Model;
using System.Data.OracleClient;
using System.Data;

namespace Strong.Plm.SqlRepository
{
    public class WUFEI_TESTTBRepository
    {
        public bool AddWUFEI_TESTTB(WUFEI_TESTTBModel wufei_testtb)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {
                string executeSql = @" INSERT INTO WUFEI_TESTTB (USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK ) 
                           VALUES (:USER_ID, :USER_NAME, :USER_ADDRESS, :USER_SEX, :USER_BIRTHDAY, :USER_REMARK) ";
                return conn.Execute(executeSql, wufei_testtb) > 0 ? true : false;
            }
        }

        /// <summary>
        /// 使用事務批量新增
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public int AddWUFEI_TestTbByTrans(List<WUFEI_TESTTBModel> list)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {                
                IDbTransaction transaction = conn.BeginTransaction();
                int row = 0;
                foreach (var item in list)
                {
                    string executeSql = @" INSERT INTO WUFEI_TESTTB (USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK ) 
                           VALUES (:USER_ID, :USER_NAME, :USER_ADDRESS, :USER_SEX, :USER_BIRTHDAY, :USER_REMARK) ";
                    row += conn.Execute(executeSql, item, transaction, null, null);
                }
                transaction.Commit();
                return row;                
            }
        }

        public bool DeleteWUFEI_TESTTB(int USER_ID)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {
                string executeSql = @" DELETE FROM WUFEI_TESTTB WHERE USER_ID = :USER_ID  ";
                var conditon = new { USER_ID = USER_ID };
                return conn.Execute(executeSql, conditon) > 0 ? true : false;
            }
        }

        public bool EditWUFEI_TESTTB(WUFEI_TESTTBModel wufei_testtb)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {
                string executeSql = @" UPDATE WUFEI_TESTTB SET USER_NAME = :USER_NAME,USER_ADDRESS = :USER_ADDRESS,USER_SEX = :USER_SEX,USER_BIRTHDAY = :USER_BIRTHDAY,USER_REMARK = :USER_REMARK   
                                    WHERE USER_ID = :USER_ID  ";
                return conn.Execute(executeSql, wufei_testtb) > 0 ? true : false;
            }
        }

        public bool UpdateWUFEI_TESTTB(string sqlStr)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {
                return conn.Execute(sqlStr) > 0 ? true : false;
            }
        }

        public WUFEI_TESTTBModel GetWUFEI_TESTTB(Decimal USER_ID)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {
                String executeSql = @" SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK FROM WUFEI_TESTTB
                                    WHERE USER_ID = :USER_ID ";
                var conditon = new { USER_ID = USER_ID };
                return conn.Query<WUFEI_TESTTBModel>(executeSql, conditon).SingleOrDefault();
            }
        }
        public KeyValuePair<Pagination, IList<WUFEI_TESTTBModel>> WUFEI_TESTTBPaginationA(Pagination pagin, WUFEI_TESTTBModel condition)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {
                String condtionStr = "";
                String executeQuery = String.Format(@"SELECT * FROM (SELECT table_source.*, ROWNUM AS rowno
                                          FROM ( SELECT  USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK
                                          FROM WUFEI_TESTTB
                                          WHERE 1= 1 {2}) table_source
                                          WHERE ROWNUM <= ({0}  * {1})) table_alias
                                          WHERE table_alias.rowno >= ((({0} - 1)  * {1}) + 1)", pagin.CurrentPageIndex, pagin.PageSize,condtionStr);

                String executeCount = String.Format("SELECT COUNT(1) AS CountNum FROM WUFEI_TESTTB WHERE 1= 1 {0}", condtionStr);
                var mixCondition = new
                {
                    CurrentPageIndex = pagin.CurrentPageIndex,
                    PageSize = pagin.PageSize
                };
                List<WUFEI_TESTTBModel> listScore = conn.Query<WUFEI_TESTTBModel>(executeQuery, null).ToList();                               

                pagin.TotalItemCount = conn.Query<Decimal>(executeCount, null).SingleOrDefault();
                KeyValuePair<Pagination, IList<WUFEI_TESTTBModel>> result =
                    new KeyValuePair<Pagination, IList<WUFEI_TESTTBModel>>(pagin, listScore);
                return result;
            }
        }

        public KeyValuePair<Pagination, IList<WUFEI_TESTTBModel>> WUFEI_TESTTBPagination(Pagination pagin, WUFEI_TESTTBModel condition)
        {
            using (OracleConnection conn = DapperFactory.CrateOracleConnection())
            {
                String condtionStr = "";
                String orderBy = "USER_ID DESC";
                if (!String.IsNullOrEmpty(pagin.OrderBy))
                {
                    orderBy = pagin.OrderBy;
                }

                String executeQuery = String.Format(@"SELECT * FROM (SELECT table_source.*, ROWNUM AS rowno From(
                                        SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK FROM WUFEI_TESTTB
                                        WHERE 1= 1 {0} ) table_source
                                        WHERE ROWNUM <= (:CurrentPageIndex * :PageSize)) table_alias 
                                        WHERE table_alias.rowno >= (((:CurrentPageIndex - 1)  * :PageSize) + 1)", condtionStr, orderBy);
      

                String executeCount = String.Format("SELECT COUNT(*) AS CountNum FROM WUFEI_TESTTB WHERE 1= 1 {0} ", condtionStr);
                var mixCondition = new
                {
                    CurrentPageIndex = pagin.CurrentPageIndex,
                    PageSize = pagin.PageSize
                };
                List<WUFEI_TESTTBModel> listScore = conn.Query<WUFEI_TESTTBModel>(executeQuery, mixCondition).ToList();
                pagin.TotalItemCount = conn.Query<Decimal>(executeCount, mixCondition).SingleOrDefault();
                KeyValuePair<Pagination, IList<WUFEI_TESTTBModel>> result =
                    new KeyValuePair<Pagination, IList<WUFEI_TESTTBModel>>(pagin, listScore);
                return result;
            }
        }
    }
}

 

這里以表WUFEI_TESTTB為例,字段很少,就不提供Sql語句了,用戶自己創建下吧。

其中WUFEI_TESTTBModel就是表WUFEI_TESTTB的實體類。

代碼如下:

using System;
using System.Data;
using System.Collections;
using System.Xml;
using System.Runtime.Serialization;
namespace Tcl.ForLog.Model
{
    /// <summary>
    /// 表WUFEI_TESTTB的對象類    
    /// </summary> 
    [DataContract(Name = "WUFEI_TESTTB")]
    public class WUFEI_TESTTBModel
    {
        #region 表名稱常量

        /// <summary>
        /// 表名稱
        /// </summary>
        public const string TABLE_NAME = "WUFEI_TESTTB";

        #endregion

        #region 屬性

        /// <summary>
        /// 用戶ID
        /// </summary>
        [DataMember(Name = "USER_ID")]
        public decimal USER_ID { get; set; }

        /// <summary>
        /// 用戶名稱
        /// </summary>
        [DataMember(Name = "USER_NAME")]
        public string USER_NAME { get; set; }

        /// <summary>
        /// 用戶地址
        /// </summary>
        [DataMember(Name = "USER_ADDRESS")]
        public string USER_ADDRESS { get; set; }

        /// <summary>
        /// 用戶性別
        /// </summary>
        [DataMember(Name = "USER_SEX")]
        public string USER_SEX { get; set; }

        /// <summary>
        /// 用戶生日
        /// </summary>
        [DataMember(Name = "USER_BIRTHDAY")]
        public DateTime USER_BIRTHDAY { get; set; }

        /// <summary>
        /// 備注
        /// </summary>
        [DataMember(Name = "USER_REMARK")]
        public string USER_REMARK { get; set; }

        /// <summary>
        /// WUFEI_TESTTBModel深拷貝
        /// </summary>
        /// <returns></returns>
        public static WUFEI_TESTTBModel DeepCopy(WUFEI_TESTTBModel testTbA)
        {
            WUFEI_TESTTBModel testTbB = new WUFEI_TESTTBModel();
            testTbB.USER_ID = testTbA.USER_ID;
            testTbB.USER_NAME = testTbA.USER_NAME;
            testTbB.USER_ADDRESS = testTbA.USER_ADDRESS;
            testTbB.USER_SEX = testTbA.USER_SEX;
            testTbB.USER_BIRTHDAY = testTbA.USER_BIRTHDAY;
            testTbB.USER_REMARK = testTbA.USER_REMARK;

            return testTbB;
        }
        #endregion

    }
}

這里的代碼看似很多,其實是通過CodeSmith生成的,非常便於快速開發網站。

 

如果對你有用,請幫忙點推薦,謝謝。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM