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.新建连接 ...
随机推荐
- php验证码的简单例子
php随机验证码: <?php $image_width=140; $image_height=50; srand(microtime()*10000); ...
- Ubuntu 12.04 安装sougou for linux
安装sougou for linux: 1.卸载原有的输入法,fcitx或ibus.如卸载fcitx: sudo apt-get remove fcitx*(如不需保留配置文件用purge) sudo ...
- ecshop改造读写分离配置与改造
前两天配置好了mysql主从方式,今天就拿ecshop练习读写分离.以下代码仅供学习参考,不成熟的地方,还需完善. <?php $db_name = "ecshop"; $p ...
- 淘宝的ip地址库
1. 请求接口(GET): http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串] 2. 响应信息: (json格式的)国家 .省(自治区或直辖市 ...
- Spark Streaming揭秘 Day15 No Receivers方式思考
Spark Streaming揭秘 Day15 No Receivers方式思考 在前面也有比较多的篇幅介绍了Receiver在SparkStreaming中的应用,但是我们也会发现,传统的Recei ...
- 宝马-中国官方网站服务站点信息爬去记录(解析json中数据)
具体步骤: 1.进入宝马官网,查找经销商查询界面 http://www.bmw.com.cn/cn/zh/general/dealer_locator/content/dealer_locator.h ...
- Ducci Sequence
Description A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers ( ...
- Mybatis+SpringMVC的项目环境搭建
一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...
- ExtJS4.2学习(10)分组表格控件--GroupingGrid(转)
鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-17/179.html ------------- ...
- Why are very few schools involved in deep learning research? Why are they still hooked on to Bayesian methods?
Why are very few schools involved in deep learning research? Why are they still hooked on to Bayesia ...