.NET EF 访问Oracle之问题小结
2015-10-22 00:56
435 查看
由于最近手头上的项目要求使用Oracle数据库,所以我搭建了asp.net mvc + EF + bootstrap + log4Net + unity的三层框架,如下图所示:
其中单元测试使用微软自带的,个人感觉轻便,所以没使用NUnit。
使用EF+Oracle期间,遇到一些问题让我挺纠结,因为之前一直使用EF+SQL SERVER,如下:
1.为了防注入,使用参数的方式过滤,SQL SERVER 是用@,而Oracle使用的是:,如下:
而SQL SERVER如下:
并且,要特别注意,虽然like ‘%%’这种语法在Oracle客户端上可以执行,但是通过C#代码却不可以,要使用instr(name, :userName) > 0代替,至于为什么不行,暂时没时间去探索,希望知道的朋友留言赐教。
2.Oracle客户端执行的sql可以在末尾表;,并且多条语句一起执行的时候,必须在每一句末尾加;,但是在C#代码里面,却不可以带;,否则出现ora-00933:sql命令未正确结束的问题。如下:
如上则没问题,而
就会出现“ora-00933:sql命令未正确结束”的问题。
暂时发现如上两个和EF操作SQL SERVER不一样的问题,继续探究,到时候再补充!
其中单元测试使用微软自带的,个人感觉轻便,所以没使用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不一样的问题,继续探究,到时候再补充!
相关文章推荐
- Oracle11g R2 silent安装
- redhat 6.5 64位安装oracle 11g所缺包
- Oracle用户和模式的区别
- oracle数据库添加约束
- ORA-01033: ORACLE initialization or shutdown in progress数据文件损坏错误解决方案
- Oracle dblink详解(转)
- oracle数据库操作修改字段
- 关于oracle数据库
- mysql与Oracle的区别
- Oracle一个中文汉字占用几个字节
- CentOS6.5安装Oracle11G R2
- Oracle对表解锁的操作
- 物化视图
- oracle 表空间大小的查看与修改
- powerDesigner把表模型映射到oracle数据库中
- oracle 中身份证号15位升18位
- ORACLE函数
- Oracle Data Guard RAC到单机ASM配置(物理standby)
- 微软云centos6.7虚拟机下准备VNC环境来安装oracle11g
- Oracle replace 的函数用法