zoukankan      html  css  js  c++  java
  • 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生成的,非常便于快速开发网站。

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

  • 相关阅读:
    【并发编程】安全发布对象
    【并发编程】并发的学习步骤
    特殊字符
    【并发编程】【JDK源码】CAS与synchronized
    【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构
    【JDK源码】将JDK源码导入IDEA中
    【Linux命令】用户及分用户组
    【Linux命令】linux一次性解压多个.gz或者.tar.gz文件
    悟透JavaScript
    设计模式------工厂模式和抽象工厂模式
  • 原文地址:https://www.cnblogs.com/ushou/p/3359973.html
Copyright © 2011-2022 走看看