.net 程序远程连接 Oracle 数据库
2010-03-31 11:30
871 查看
.net远程连接Oracle数据库看起来挺简单的,但实际做起来还是遇到不少问题。把我今天折腾这个东西的经验给大家共享吧。
访问oracle数据库的方式很多,我给出两种,一种是OleDbConnection还有一种是.NETManagedProviderforOracle,这个没什么好说的,代码如下:
1.连接代码
.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;}
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)
访问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这个进程打交道了。这个新的连接端口是不可预知的,因而会被防火墙阻止。
要解决这个问题,网上查到的办法是采用共享套接字,这个方法应该是一个比较通用的办法,如何做详见
不过我偷了个懒,因为我只用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)
相关文章推荐
- .net程序无法连接oracle9.2.0.1数据库解决方法
- plsql连接本地oracle数据库,而远程主机却无法连接,出现无监听程序的解决方法
- 在 oracle 数据库上构建 .NET程序以及数据库连接事务说明
- oracle创建实例化数据库或者连接别的远程主机数据库提示“无监听程序”的解决办法
- Oracle9中使用sqlplus连接远程数据库
- PLSQL连接远程Oracle出现ORA-12541: 无监听程序
- 不安装Oracle客户端情况下使用PL/SQL 远程连接数据库
- 不安装Oracle客户端远程连接Orcale数据库
- 从SQL Server向Oracle迁移的技术实现方案(十)连接远程的数据库(包括不同服务器)
- oracle连接远程数据库导出数据的两种方式
- 无法远程连接WindowsXp中的Oracle 10g数据库
- 本地不安装oracle,plsql远程连接数据库
- C#连接Access、SQL Server、Oracle、MySQL、DB2和SyBase六种不同数据库的程序源码
- 连接Oracle远程数据库错误:ORA-12541,ORA-12514,ORA-01017的解决方法!
- 用NUnit为.NET程序做测试---数据库测试之连接测试
- 本地不安装Oracle,使用plsql远程连接数据库
- 远程连接ORACLE 12C中可插拔数据库PDB
- PHP + ORACLE 远程连接数据库环境配置
- 利用oracle instant client,不安装客户端使用plsql远程连接数据库
- oracle只装客户端远程连接数据库