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生成的,非常便于快速开发网站。

 

如果对你有用,请帮忙点推荐,谢谢。

 

 

你可能感兴趣的:(oracle)