.NET EF 访问Oracle之问题小结
由于最近手头上的项目要求使用Oracle数据库,所以我搭建了asp.net mvc + EF + bootstrap + log4Net + unity的三层框架,如下图所示:

其中单元测试使用微软自带的,个人感觉轻便,所以没使用NUnit。
使用EF+Oracle期间,遇到一些问题让我挺纠结,因为之前一直使用EF+SQL SERVER,如下:
1.为了防注入,使用参数的方式过滤,SQL SERVER 是用@,而Oracle使用的是:,如下:
/// <summary>
/// 测试函数
/// </summary>
public DataTable TestSql(string userName)
{
var fpmCustomSqlDAO = ServiceLocator.GetService<IFPMCustomSqlDAO>();
string sql = @"select *
from fpm_user
where instr(name, :userName) > 0";
var para = new OracleParameter("userName", userName);
//para.Value = userName;
return DB.ExecuteDataTable(sql,para);
}
而SQL SERVER如下:
/// <summary>
/// 测试函数
/// </summary>
public DataTable TestSql(string userName)
{
var fpmCustomSqlDAO = ServiceLocator.GetService<IFPMCustomSqlDAO>();
string sql = @"select *
from fpm_user
where name like '%@userName%' > 0";
var para = new SqlParameter("@userName", userName);
//para.Value = userName;
return DB.ExecuteDataTable(sql,para);
}
并且,要特别注意,虽然like ‘%%’这种语法在Oracle客户端上可以执行,但是通过C#代码却不可以,要使用instr(name, :userName) > 0代替,至于为什么不行,暂时没时间去探索,希望知道的朋友留言赐教。
2.Oracle客户端执行的sql可以在末尾表;,并且多条语句一起执行的时候,必须在每一句末尾加;,但是在C#代码里面,却不可以带;,否则出现ora-00933:sql命令未正确结束的问题。如下:
string sql = @"select *
from fpm_user
where instr(name, :userName) > 0";
如上则没问题,而
string sql = @"select *
from fpm_user
where instr(name, :userName) > 0;";
就会出现“ora-00933:sql命令未正确结束”的问题。
暂时发现如上两个和EF操作SQL SERVER不一样的问题,继续探究,到时候再补充!
.NET EF 访问Oracle之问题小结的更多相关文章
- EF for Oracle,dotConnect for Oracle,ODP.NET
dotConnect for Oracle dotConnect for Oracle是一款为Microsoft .NET Framework提供直接Oracle数据库连接的数据发生器控件.它完全基于 ...
- [转]使用ADO.NET访问Oracle存储过程
本文转自:http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程( ...
- SQL Server 使用OPENROWSET访问ORACLE遇到的各种坑总结
在SQL Server中使用OPENROWSET访问ORACLE数据库时,你可能会遇到各种坑,下面一一梳理一下你会遇到的一些坑. 1:数据库没有开启"Ad Hoc Distributed Q ...
- 64位操作系统 通过ODP.NET 访问ORACLE 11g
摘要:64位操作系统部署.NET 程序访问oracle时,无法连接问题.(注意:客户端是64位系统 ,服务端是否64位 还是32位无关.) 1.到oracle 官网搜索相关版本的 ODAC网址: ht ...
- 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录
64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...
- 应用EF访问SQLite数据
创建项目,应用EF访问SQLite 1.创建项目 项目结构初始结构如下图所示,Netage.Data.SQLite 类库项目用于定义访问数据的接口和方法,Netage.SQLiteTest.UI 控制 ...
- .net(C#)访问Oracle数据库的几种免安装组件的对比
Oracle 数据存取组件(ODAC) 库为Borland Delphi,C++ Builder 以及 Kylix提供了一些非可视化的组件.它们用来存取Oracle关系数据库系统.与BDE类似, OD ...
- c#访问Oracle问题及解决方法
Q:访问oracle 查询条件带汉字结果集为空的问题 A:数据库连接字符串中加入Unicode=true即可. 如 <add key="DbConnectionString" ...
- 在PostgreSQL中使用oracle_fdw访问Oracle
本文讲述如何在PostgreSQL中使用oracle_fdw访问Oracle上的数据. 1. 安装oracle_fdw 可以参照:oracle_fdw in github 编译安装oracle_fdw ...
随机推荐
- Java NIO与IO的差别和比較
导读 J2SE1.4以上版本号中公布了全新的I/O类库.本文将通过一些实例来简介NIO库提供的一些新特性:非堵塞I/O,字符转换,缓冲以及通道. 一. 介绍NIO NIO包(java.nio.*)引入 ...
- MYSQL在线注释文档--- 在gdb中显示源码(gdbtui使用方法)----赖明星的个人博客
http://mingxinglai.com/cn/2013/07/gdbtui/ MySQL源码注释与类图 http://mingxinglai.com/cn/2015/08/mysql-annot ...
- wireshark抓包图解 TCP三次握手/四次挥手详解
http://www.seanyxie.com/wireshark%E6%8A%93%E5%8C%85%E5%9B%BE%E8%A7%A3-tcp%E4%B8%89%E6%AC%A1%E6%8F%A1 ...
- Ubuntu上架设PPPoE Server
一.安裝 PPPoE Server Software1)sudo apt-get install ppp2)rp-pppoe(非apt套件)wget -c http://www.roaringpeng ...
- java 四种逻辑运算符
在java的逻辑运算符中,有这么四类&&(短路与).&(与).||(短路或).|(非短路或) &&和&都表示与,&&表示第一个条件为fa ...
- Eclipse内存溢出问题
我们经常遇到eclipse内存溢出问题,实际上只需要修改eclipse程序目录下的eclipse.ini文件, -Xms40m -Xmx1000m -XX:MaxPermSize=256m
- C++ 全排列函数 nyoj 366
C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.st ...
- ADO.NET连接数据库的两种方式
//实现了IDisposable接口的类,用using括起来 //插入数据 string connString = "Data Source=(local);Initial Catalog= ...
- C++编程注意事项
1.所有成员变量在构造函数中进行初始化操作,如指针赋值为空,bool赋值为FALSE(默认为TRUE); 2.构造函数与析构函数配对出现,执行反向操作,保证执行析构之后,没有遗留问题存在: 3.如果需 ...
- Object-C日志记录
在Object-C中,将日志信息输出到控制台是非常简单的.实际上NSLog()函数很像C语言里面的printf()函数,出了要用一个%@符号代表一个对象. NSLog(@"The curre ...