NET.ASP从32位系统签转到64位系统-Oracle64位那些事
这两天签转原来的程序到Win10 64位下,数据库是Oracle11G64位。
首先,发现不能来接数据库,就是连接串打不开。查询的大量的资料,发现了一个解决办法比较省事
下载一个叫Oracle.ManagedDataAccess的dll文件并引用到项目中,然后需要
去掉using System.Data.OracleClient;
加入下边的引用
using Oracle.ManagedDataAccess;
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
下面就是各种的爬坑
第一坑:
以前的连接串不支持需要修改
连接串如下:
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User ID=XXXXXX;Password=XXXXX;
注意PORT的端口是否正确,用户名密码需要改成自己的
另一种形式:
connectionString="DataSource=192.168.1.2:1521/orcl;Persist Security Info=True;User ID=scott;Password=tiger";
第二坑:
1、OracleType.Number 改成 OracleDbType.Int32
2、OracleType.VarChar 改成 OracleDbType.NVarchar2或OracleDbType.Varchar2
3、OracleType.Char 改成 OracleDbType.Char
4、OracleType.Int32 改成 OracleDbType.Int32
5、OracleType.DateTime改成 OracleDbType.Date
太多了不一一列举了,就是将原来的OracleType改成OracleDbType对应的类型就是了。
第三坑:
new OracleCommand()
改成
new Oracle.ManagedDataAccess.Client.OracleCommand()
不改提示错误,可能是需要明确一下command吧
第四坑:
Oracle.ManagedDataAccess居然不自动匹配参数,还一直报ora-01722错误。搞得懵逼3个多小时!
只要是操作需要传参的都是一样的,如多条件查询和Update操作,单条件查询没有问题。
如果你定义的commandParameters的顺序与语句中的顺序是一直的也OK,但大多数情况下,很难保持这样的顺序。
解决方法如下,显示要求cmd进行参数匹配
OracleCommand cmd = new OracleCommand();
cmd.BindByName = true;
刚爬到这了,未完待续!