您的位置:首页 > 数据库 > Oracle

.net 程序远程连接 Oracle 数据库

2010-03-31 11:30 871 查看
.net远程连接Oracle数据库看起来挺简单的,但实际做起来还是遇到不少问题。把我今天折腾这个东西的经验给大家共享吧。

访问oracle数据库的方式很多,我给出两种,一种是OleDbConnection还有一种是.NETManagedProviderforOracle,这个没什么好说的,代码如下:

1.连接代码

采用OleDbConnection连接的方法如下:
_OleDbConnection=newOleDbConnection(connectionString);
_OleDbConnection.Open();
采用OracleConnection连接的方法如下:
_OracleConnection=newOracleConnection(connectionString);
_OracleConnection.Open();

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

这里需要注意的是OleDbConnection对Clob之类的Oracle9i的数据类型不支持,必须使用OracleConnection
参见INFO:LimitationsofMicrosoftOracleODBCDriverandOLEDBProvider
如果用OracleConnection必须安装.NETManagedProviderforOracle
下载地址
.NETManagedProviderforOracle

2.连接字符串

远程连接的连接字符串可以这样写

OleDbConnection的连接字符串:

provider=MSDAORA;host=192.168.1.1;datasource=MyTest;userid=system;password=xxx

provider=MSDAORA;指明oledb的提供者是oracle数据库

host是远程oracle数据库所在服务器的IP地址,如果端口不是默认的1521,还要加上一个Port=xxxx;

datasource是要访问的oracle数据库的名字

userid和password就不说了。

.NETManagedProviderforOracle的连接字符串:

server=192.168.1.1;datasource=MyTest;userid=system;password=xxx

要能够成功运行上面代码,我们必须在代码运行的机器上安装oracle的客户端,否则会报

TheOracle(tm)clientandnetworkingcomponentswerenotfound这个错误。

3.主机防火墙设置

我的Oracle安装在windows2003server上,为了安全起见,必须设置防火墙

我在windows2003下将1521端口开放,发现无法连接数据库,抓包看了一下,oracle客户端在连接了1521后又去连接了一个随机的端口1197

查了一下资料,oracle的networklistener只起一个中介作用,当客户连接它时,它根据配置寻找到相应的数据库实例进程,然后分配一个新的数据库连接,这个连接端口由networklistener传递给客户机,此后客户机就不再和networklistener打交道了,而是和oracle.exe这个进程打交道了。这个新的连接端口是不可预知的,因而会被防火墙阻止。

要解决这个问题,网上查到的办法是采用共享套接字,这个方法应该是一个比较通用的办法,如何做详见

在windowsserver2003系统防火墙上开放Oracle服务端口连接1521TNS超时

不过我偷了个懒,因为我只用windows的防火墙,windows防火墙可以对某个进程开放所有端口。所以只要按下面图示的方式设置一下windows防火墙,就可以访问了。









4.客户端和服务器的字符集

插入中文时显示乱码,需要将客户端和服务器的NLS_LANG都设置为

SIMPLIFIEDCHINESE_CHINA.ZHS16GBK

Windows下

修改注册表

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0下的NLS_LANG(9i)
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb10g_home1下的NLS_LANG(10g)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: