解决.NET连接Oracle数据库的一些问题(转)

转自:http://www.xueit.com/html/2010-04/21-1836276427201041594451703.html

访问 oracle 数据库的方式很多,这里出两种,一种是OleDbConnection 还有一种是 .NET Managed Provider for Oracle,这个没什么好说的,代码如下:
1. 连接代码
采用 OleDbConnection 连接的方法如下:_OleDbConnection = new OleDbConnection(connectionString);_OleDbConnection.Open(); 采用 OracleConnection 连接的方法如下: _OracleConnection = new OracleConnection(connectionString);_OracleConnection.Open(); 这里需要注意的是 OleDbConnection 对 Clob 之类的 Oracle 9i 的数据类型不支持,必须使用 OracleConnection
参见 INFO: Limitations of Microsoft Oracle ODBC Driver and OLEDB Provider如果用 OracleConnection 必须安装 .NET Managed Provider for Oracle下载地址.NET Managed Provider for Oracle

2.连接字符串远程连接的连接字符串可以这样写OleDbConnection 的连接字符串:provider=MSDAORA;host=192.168.1.1;data source=MyTest;user id=system;password=xxxprovider = MSDAORA; 指明oledb 的提供者是oracle数据库 host 是远程 oracle 数据库所在服务器的IP地址,如果端口不是默认的 1521,还要加上一个 Port=xxxx;data source 是要访问的 oracle 数据库的名字user id 和 password 就不说了。 .NET Managed Provider for Oracle 的连接字符串:server=192.168.1.1;data source=MyTest;user id=system;password=xxx 要能够成功运行上面代码,我们必须在代码运行的机器上安装 oracle 的客户端,否则会报The Oracle(tm) client and networking components were not found 这个错误。

3. 主机防火墙设置我的 Oracle 安装在 windows 2003 server 上,为了安全起见,必须设置防火墙我在 windows 2003 下将 1521 端口开放,发现无法连接数据库,抓包看了一下,oracle 客户端在连接了 1521 后又去连接了一个随机的端口 1197查了一下资料,oracle 的 network listener 只起一个中介作用,当客户连接它时,它根据配置寻找到相应的数据库实例进程,然后分配一个新的数据库连接,这个连接端口由network listener传递给客户机,此后客户机就不再和network listener打交道了,而是和 oracle.exe 这个进程打交道了。这个新的连接端口是不可预知的,因而会被防火墙阻止。要解决这个问题,网上查到的办法是采用共享套接字,这个方法应该是一个比较通用的办法,如何做详见在windows server 2003系统防火墙上开放Oracle服务端口 连接1521 TNS超时 不过我偷了个懒,因为我只用 windows 的防火墙,windows 防火墙可以对某个进程开放所有端口。所以只要按下面图示的方式设置一下windows 防火墙,就可以访问了。  
文章来自学IT网:http://www.xueit.com/html/2010-04/21-1836276427201041594451703.html

原文地址:https://www.cnblogs.com/Rising/p/1987343.html