工作中一个项目需要从Oracle数据库中读取数据,部署时总是提示“需要 oracle 客户端软件 8.1.7 或更高版本” 从网上找资料也是说安装完Oracle 客户端之后需要设置权限之类的,但是一个几十兆的软件给客户附加一个几百兆的Oracle客户端上去,总感觉不爽吧,从网上查到 有 Oracle 9i 精简版客户端12.1M,于是想到访问Oracle无非就是使用了Oracle的一些Dll 和系统环境变量或者注册表里的某些键值,安装Oracle 9i 精简版客户端应该足够了。经过几个小时的 权限设置、连接串设置、配置文件设置 折磨后解决方法如下:
1. 安装 Oracle 9i 精简版客户端,修改tnsnames.ora文件(默认路径C:\Oracle\ora90\network\ADMIN),修改内容如下:
# TNSNAMES.ORA Network Configuration File: C:\oracle\ora90\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
#sample
#DATABASENAME =
# (DESCRIPTION =
# (ADDRESS_LIST =
# (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
# )
# (CONNECT_DATA =
# (SERVICE_NAME = servicename)
# )
# )
ORACLE = #这个名称在后面的连接字符串上用到了
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = iii)(PORT = 1521)) #修改红色的 iii 为Oracle数据库服务器的名称或IP地址
)
(CONNECT_DATA =
(SERVICE_NAME = oracle) #修改红色的oracle 为数据库名称
)
)
ORACLEBCV =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 130.81.100.136)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = scbus)
)
)
REPORT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 9.83.70.14)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = report)
)
)
修改注册表中 Oracle子键 NLS_LANG 的值和Oracle数据服务器上的一致,否则查询过来的内容是乱码。最后重启机器。
2. 连接Oracle数据库的连接字符串写法
<add name="DataAccessLibrary.Properties.Settings.ConnectionString"
connectionString="Provider=MSDAORA;Data Source=oracle;Persist Security Info=True;Password=outpadm;User ID=outpadm"
providerName="System.Data.OleDb" /> #黄色的部分要和上面配置文件里黄色的部分一样
这样问题解决,在xp下访问win2003下的 Oracle 10G 数据库 成功。
虽然用了很长时间,但是感觉这样在客户那部署时会省下将近20-30分钟的时间。