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

转载于:https://www.cnblogs.com/ismallboy/p/4899684.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值