对oracle不算熟,对.net结合oracle开发项目也只做过一个。最近换了新电脑,装了win7 64位系统,然后各种软件各种要装啊,问题就一堆一堆来了。
现在列出一些研究折腾比较长时间的问题,供以后及挨踢的同学们参供。
公司用的是oracle10g,vs2010,都是32位的
1) oracle10g在64位win7无法直接安装,解决方法:在安装启动exe文件右键打开属性菜单,然后选择兼容性--->勾选以兼容性运行这个程序-->选择winxp,保存后可以安装。
2)之前用winxp32位系统,连接字符串是这样子的 <add name="SQLMembershipConnString2" connectionString="Data Source=ORCL;User Id=system;Password=123456;" providerName="Oracle.DataAccess.Client"/>
换到现在64位win7后一直不能运行,折腾了一天才知道竟然是连接字符串的问题。提示的错误是说oracle客户端版本不够高,不管连接字符串怎么改都是一样错误提示,百度后找到很多文章都是说权限不足原因(不确定是否有这个原因),改了后还是一样问题,这个问题折腾了我一天的时间!!,后来还下载了oracle的odp.net组件,32位的64位的各种折腾,都有错误提示,按错误提示在网上搜索都不能解决。以为framework的类和odp.net有兼容问题。后来他仔细看了odp.net的说明,本来打算是连接远程服务器,就试着用 <add name="SQLMembershipConnString3" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.253.11)(PORT=1521)) (CONNECT_DATA=(SID=HZDB)));User Id=test;Password=123456;" providerName="Oracle.DataAccess.Client"/>这样的字符串,因为之前大量变动的原因,所以也折腾了很久也没连上,正当我打算要放弃回家重装32位系统时,刷页面发现错误提示是“未找到表或视图”,我靠!然后就这样发现了问题的根源:连接字符串不对呀。经过测试发现另外一种写法也是可以的: <add name="SQLMembershipConnString" connectionString="Data Source=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.253.128)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
);User Id=test;Password=123456;
" providerName="Oracle.DataAccess.Client"/>
由于其间相换odp.net组件,因为各种不了解,走了一些弯路,花的时间也多了。网上也有不少人遇到这种问题,不过都没发现有人给出这个答案。
呜呼唉哉。。。微软不想更新System.Data.OracleClient组件了,也不用这么省功夫吧,只要连接不上只有一个错误提示:oracle客户端版本不够高,希望给那个沤血中的挨踢同学们一个参考,IT不容易呀。
补充: 经过了一个多月,不断发现一些问题,今天找资料时无意中发现一上面System.Data.OracleClient不能连oracle的原因,并且有了解决方法,顺便纠正一下之前上文的错误,window7 64位系统,装的是32位oracle10g,需安装32位11g客户端,我下装安装的版本是ODTwithODAC1120320_32bit.zip,默认System.Data.OracleClient不能连oracle,需要改一下电脑系统的环境变量path,把默认的oracle路径改为可以正常访问的客户端路径(如我的路径:D:\oracle\product\product\11.2.0\client_1)。原因是System.Data.OracleClient访问oracle数据库是会依照PATH路径寻找oci.dll,如果oci.dll的版本不支持64.net就会失败不能连接数据库,改为能用的客户端就能连接数据库了。