一般我们使用C#开发时,往往选择sql server数据库与之配合使用,因为使用起来最方便。
但如果我们需要和第三方厂商的软件进行数据交互时,就有可能碰到对方使用Oracle数据库,并且在某些特定情况下还只能把数据交互的接口放到Oracle上,这时候我们就需要访问Oracle数据库了。
针对这种情况,我们有两种访问方案:
直接在软件中增加对Oracle数据库的读写操作
在SQL Server数据库中建立链接服务器,并通过同义词把接口表当做本地表来访问
由于访问Oracle时必须安装Oracle客户端,对于方案1来说,不仅需要针对Oracle开发对应的访问代码,还需要在每台安装软件的电脑上装上Oracle客户端,这对软件的部署带来了很大的压力(B/S架构除外);而方案2则仅仅需要在SQL Server所在的电脑上安装Oracle客户端即可。
而对于访问Oracle数据库的性能和灵活性来说,方案1既可以较快的速度访问,也能使用事务、内置函数等一系列Oracle所拥有的功能;而方案2的访问速度很慢,也不能使用事务。
作为数据交互接口,我们估计其访问的数据量很小,对性能的要求也不高,所用的操作也就普通的增删改查,不会用到Oracle特有的东西。综合上面的对比分析,再考虑效率,觉得方案2比较适合。
下面以方案2为例说明一下配置的过程:
1、安装Oracle客户端
先到Oracle的官网上下载适用于Windows的Oracle Data Access Components(ODAC),这里使用ODAC112030Xcopy_x64.zip(如果系统不是64位的请选择32位的版本,如ODAC112030Xcopy_32bit.zip)。
解压并在命令行界面进入解压文件夹,运行“install.bat oledb c:\oracle odac”安装(我们只需要oledb的驱动,并把对应的文件安装到C盘oracle目录下。注意其中的空格)。
在环境变量中为Path添加“C:\oracle;C:\oracle\bin;”到开头。
2、在SQL Server添加链接服务器
在SQL Server Management Studio中连接到数据库,并在其下的“服务器对象”-“链接服务器”,右键选择“新建链接服务器”。
在常规中填入链接服务器名称:SWAPDB、访问接口:Oracle Provider for OLE DB、产品名称:oracle、数据源:(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = ORACLEDB)))
其中链接服务器名称在建立同义词的时候用到,产品名称可以随便填,数据源中的HOST和SERVICE_NAME改为自己所使用Oracle接口的对应地址与数据库名称。
在安全性中选择“使用此安全上下文建立连接”,填入Oracle数据库所用的登陆账号/密码,点击“确定”建立链接。
在“服务器对象”-“链接服务器”-“访问接口”-“OraOLEDB.Oracle”,右键选择“属性”。
启用“允许进程内”的接口选项。
建立链接服务器后可以通过“服务器对象”-“链接服务器”-“SWAPDB”,右键“测试连接”查看是否成功。
3、在数据库中创建同义词
在对应数据库的查询窗口中执行“CREATE SYNONYM [dbo].[T_User] FOR [SWAPDB]..[ORAUSER].[T_User]”,这里只能用SQL语句建立同义词,使用图形界面将出错,其中T_User是表名称,SWAPDB是刚才创建的链接服务器名称,ORAUSER是Oracle数据库的用户。
配置完成后,我们就可以在SQL Server中直接使用“select * from T_User”访问远程Oracle的接口表了