上学的时候学过Oracle数据库,不过都一年多没有碰过Oracle数据库而且上学的时候学的是Java+Oracle并没有接触.NET+Oracle。由于项目的需要我不得不捡起来Oracle数据库这块知识从基础开始学起,当然我也不是什么大神不会就Google或者百度。


环境 VisualStudio 2015,.NET 4.0, Oracle11gR2X32


问题1:关于DLL文件问题

    之前做项目用到的包都是从NuGet程序包管理工具里面下载因为方便,接着我就下载了Oracle.ManagedDataAccess.dll,然后网上直接找了个OracleHelper就开始我的愣头青般的踩坑。

    

Oracle连接字符串用的是

Data Source=127.0.0.1/orcl;User ID=scott;Password=123456

错误1Oracle.ManagedDataAccess 外部组件发生异常。    ,原因是dll与数据库版本不符合导致的。

解决方案:更换ODP.NET DLL文件,换成数据库版本下符合的DLL。打开你的数据库目录找到相应的Oracle.DataAccess.dll添加引用

D:\oracle\product\11.2.0\dbhome_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

    引用完成之后记得把项目目标平台换成X86,要不然会引发另一个异常


查询了一下数据可以使用了!


问题2:{"ORA-00936: 缺失表达式"}关于SQL参数赋值问题

    

6362518759951458298280991.png


错误原因OracleParameter 赋值,在使用SqlServer或者MySql的时候赋值Sql字符串参数一般都是使用@加字母作为ParameterName,在Oracle中使用@是错误的。我们应当使用:加字母作为ParameterName

public int Insert(Emp emp)
        {
            string str = "insert into scott.emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) "
                + "values (:empno,:ename,:job,:mgr,to_date(:hiredate,'dd-mm-yyyy'),:sal,:comm,:deptno)";
            OracleParameter[] parameter = {

                //new OracleParameter("@empno",emp.EmpNo),
                //new OracleParameter("@ename",emp.Ename),
                //new OracleParameter("@job",emp.Job),
                //new OracleParameter("@mgr",emp.Mgr),
                //new OracleParameter("@hiredate",emp.HireDate.ToString("dd-MM-yyyy")),
                //new OracleParameter("@sal",emp.Sal),
                //new OracleParameter("@comm",emp.Comm),
                //new OracleParameter("@deptno",emp.Deptno),

                new OracleParameter(":empno",emp.EmpNo),
                new OracleParameter(":ename",emp.Ename),
                new OracleParameter(":job",emp.Job),
                new OracleParameter(":mgr",emp.Mgr),
                new OracleParameter(":hiredate",emp.HireDate.ToString("dd-MM-yyyy")),
                new OracleParameter(":sal",emp.Sal),
                new OracleParameter(":comm",emp.Comm),
                new OracleParameter(":deptno",emp.Deptno),
            };
            int rows = OracleHelper.ExecuteNonQuery(connectionString, System.Data.CommandType.Text, str, parameter);

            return rows;
        }

问题3:{"ORA-01861: 文字与格式字符串不匹配"}关于SQL参数赋值问题

这个错误一般出现在时间字段上,即你插入的时间格式和数据库现有的时间格式不一致,解决的方法是格式化你插入的时间:

to_date('#','yyyy-mm-dd hh24:mi:ss')



    一个Oracle数据库添加弄了2个小时,也是没有谁了。

            
6362518830664134491825165.jpg