当使用.NET 4.0自带的System.Data.OracleClient去访问ORACLE数据库时,
使用如下连接字符串会报ora-00177问题。
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.39)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME = lnorcl)));User Id=sisfutai;Password=sisfutai;
建议使用此写法解决该问题。
Data Source=192.168.2.39:1521/lnorcl;Persist Security Info=True;User ID=sisfutai;Password=sisfutai;Unicode=True
详细可以参考:
1.通过System.Data.OracleClient
引用命名空间
C#引用System.Data.OracleClient。
2.通过Oracle.DataAccess.dll
(Oracle.DataAccess.dll可以从安装有Oracle的目录下\app\Administrator\product\11.2.0\dbhome_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll找到)
引用Oracle.DataAccess.OracleClient命名空间
3.关于两个命名空间的说明
System.Data.OracleClient和Oracle.DataAccess.OracleClient只能用一个,这两个命名空间下的数据库操作类基本相同,如果两个都引用,就会造成引用冲突。
推荐使用Oracle官方提供的Oracle.DataAccess.dll,因为微软已经不建议使用System.Data.OracleClient了。
4.连接相关准备 oci.dll、orannzsbb10.dll、oraocci10.dll、oraociei10.dll 等dll
4.1。下载一个版本的 Instant Client for Microsoft Windows (32-bit)
http://www.oracle.com/technetwork/topics/winsoft-085727.html
4.2.解压后,找到如下的几个dll(可能还有其它的dll,不同版本的OIC名称有差异,可以自己试着找一下这些dll都有什么作用),将dll放到C#程序执行程序的相同目录下,如bin/Debug目录;
oci.dll、orannzsbb10.dll、oraocci10.dll、oraociei10.dll
如果不配置OIC环境变量,则将oci.dll、orannzsbb10.dll、oraocci10.dll、oraociei10.dll几个dll拷贝到程序的bin文件夹中。
如果已经配置OIC环境变量,则引用System.Data.OracleClient命名空间之后就可以连接Oracle了。
4.3.远程连接字符串,请改为自己的:
(1)Oracle配置文件tnsnames.ora中提供的连接字符串
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.2)(PORT=1521))(CONNECT_DATA=(SID=orcl)));User Id=scott;Password=tiger;
(2).NET提供的链接字符串
connectionString="Data Source=192.168.1.2:1521/orcl;Persist Security Info=True;User ID=scott;Password=tiger;Unicode=True";
连接字符串任选一个。
5.下面就可以使用OracleConnection连接远程Oracle了。