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不一样的问题,继续探究,到时候再补充!

  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/ismallboy/p/4899684.html
Copyright © 2011-2022 走看看