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) > ? 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 = ;
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) > ? 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) > ? true : false;
}
} public bool UpdateWUFEI_TESTTB(string sqlStr)
{
using (OracleConnection conn = DapperFactory.CrateOracleConnection())
{
return conn.Execute(sqlStr) > ? 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生成的,非常便于快速开发网站。
如果对你有用,请帮忙点推荐,谢谢。
Dapper连接Oracle的更多相关文章
- .net连接Oracle
通过网上了解到.net连接Oracle主要有3种方法.(1)System.Data.OracleClient微软的System.Data.OracleClient可以直接引用,但是VS会提示“Syst ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- Linux下部署ASP.NET服务连接oracle遇到的问题记录
一.如何卸载MONO Q:mono是linux系统上跨平台软件,卸载它有两种方式: 1.知道mono安装路径,安装原来的路径直接覆盖安装(最为简单): 2.不知道mono安装路径,首先通过sudo f ...
- Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)
一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...
- 关于ADO.NET连接ORACLE,使用ODAC连接中的一些问题
ADO.NET连接ORACLE时,用到ODAC组件时,有几点注意的. 1.安装的具体方法见:http://jingyan.baidu.com/article/e4511cf336ce872b845ea ...
- Qgis连接Oracle
CMake编译中选择编译Oracle一项以后,编译的qgis才会有连接Oracle数据库的功能. 编译qgis以后,可以通过添加矢量图层中选择Oracle数据库,或是添加Oracle空间图层,或是添加 ...
- IIS 连接 oracle报Oracle.DataAccess版本错误解决办法
通过IIS连接oracle时报“Could not load file or assembly 'Oracle.DataAccess, Version=2.112.3.0, Culture=neutr ...
- 使用Navicat连接Oracle数据时的一些问题,连接时错误:ORA-28547,新建用户后连接时错误:ORA-01017
发现Navicat作为一款连接数据库的工具确实很好用,可视化的界面看着舒服很多,下面说说我今天在连接Oracle数据库时的一些问题: 1.安装好Oracle后直接用Navicat是连接不上的,会出现如 ...
- mac版本navicat连接oracle报错ORA-21561
最近电脑更换成mac,很多软件都和win不一样了,正在慢慢适应,连接oracle原来用的客户端是pl/sql develop,蛋疼的是没有了mac版本, 用了navicat,具体设置如下 1.新建连接 ...
随机推荐
- lnmp全面优化集合nginx+mysql+php
lnmp的全名是linux+nginx+mysql+php,既然是全面优化那我们就从linux系统的选择入手.debian系统可以算是 linux各分支中做的比较突出的一类,连谷歌都抛弃linux订制 ...
- asp.net mvc 伪静态路由配置
asp.net mvc实现伪静态路由必须按如下方式设置好,才能访问 .htm 或者.html页面 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspne ...
- SYN, FIN, ACK, PSH, RST, URG
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- Oracle查看用户所在表空间
查看当前用户所在表空间 select username,default_tablespace from user_users; 修改用户默认表空间 alter user 用户名 default tab ...
- Cocos2dx隐藏iOS7状态栏】通过添加Plist Key隐藏iOS7状态栏
本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/%e9%9a% ...
- Guide to Database Migration from Microsoft SQL Server using MySQL Workbench
http://mysqlworkbench.org/2012/07/migrating-from-ms-sql-server-to-mysql-using-workbench-migration-wi ...
- iOS 跳转到系统的设置界面-b
在项目中,我们经常会碰到使用位置的需求.当用户设置app不允许使用位置的时候,最好的用户体验就是直接调转到系统的位置设置界面,进行设置. 本人已经测试,在5c iOS8.3系统 和 5s iOS7.1 ...
- Hibernate简介2
一.主配置 ◆查询缓存,同下面讲的缓存不太一样,它是针对HQL语句的缓存,即完全一样的语句再次执行时可以利用缓存数据.但是,查询缓存在一个交易系统(数据变更频繁,查询条件相同的机率并不大)中可能会起反 ...
- js页面刷新一次
// var str = document.location.hash, // index = str.indexOf("#"); // if(index == 0){ // wi ...