zoukankan      html  css  js  c++  java
  • .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不一样的问题,继续探究,到时候再补充!

  • 相关阅读:
    Chapter 4.SQL编程
    Chapter 4. 联合结果集union、插入整个表
    Chapter 4. 聚合函数、字符串函数、类型转换函数、时间日期函数
    Chapter 3. 数据检索(查询)---select、top...order by、distinct、where条件查询、分组查询、模糊查询、null处理
    练习. SQL--学生、教师、分数
    练习. SQL--选修课程练习
    Chapter 3. 数据库约束(SQL语句实现)
    Chapter 3. 数据库约束(设计器操作)
    1月11 数据索引及函数
    1月11日 数据库及表的操作
  • 原文地址:https://www.cnblogs.com/ismallboy/p/4899684.html
Copyright © 2011-2022 走看看