在.NET中使用System.Data.OracleClient库连接Oracle数据库的步骤
1.下载并安装Instant Client
Instant Client可以在Oracle官方网站下载到
对于Windows,Instant Client有三种版本:
1)适用于 Microsoft Windows(32位)的 Instant Client
2)适用于 Microsoft Windows(64位)Itanium的 Instant Client
3)适用于 Microsoft Windows(x64)的 Instant Client
可以通过在我的电脑上单击右键菜单中的属性中查看到自己电脑的处理器信息
由于我的电脑是Win7 64位系统,因此我下载了第三个包
下载完毕后,解压缩并将里面的bin目录的地址添加到环境变量path中。
再在环境变量中添加以下属性:
(我把解压缩的路径放到了D盘,解压缩后的文件夹名为instantclient_12_1)
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
TNS_ADMIN=D:\instantclient_12_1
LD_LIBRARY_PATH=D:\instantclient_12_1
2.使用Xshell4远程连接安装有Oracle的RedHat系统
需要输入以下项:
1)Name:自己起个名字
2)Protocol:选择SSH
3)Host:目标主机IP
4)Port Number:端口号(22)
5)登录的用户名/密码
附:Linux中登录数据库的命令为
sqlplus 用户名/口令@数据库名
3.获取连接字符串
查找ORACLE安装地址
Linux命令:echo $ORACLE_HOME
tnsnames.ora位于目录
$ORACLE_HOME\network\admin\
用vim打开tnsnames.ora后,发现Oracle数据库的配置如下:
xtcsjk =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 171.0.0.132)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb)
)
)
根据这个文件,就可以写出连接这个Oracle数据库的连接字符串了
Data Source=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=171.0.0.132)
(PORT=1521)
)
)
(CONNECT_DATA=
(SERVICE_NAME=TESTDB)
)
);
Persist Security Info=True;
User Id=用户名;
Password=密码
4.程序代码
注:运行下面这段代码,需要
1)手动添加对库System.Data.OracleClient的引用
2)在程序集→右键→属性→生成中,把目标平台由AnyCPU改为x64
否则会报异常BadImageFormatException(兼容性问题)
3)如果没有完成Instant Client的安装或环境变量的配置,运行时会报异常信息:
System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Method1函数调用的库,需要手动添加引用
using System.Data.OracleClient;
namespace OracleTest
{
class Program
{
//从Oracle数据库中读取时间信息
static void ReadFromOracleTest()
{
string conn = string.Concat(
@"Data Source=",
@" (DESCRIPTION=",
@" (ADDRESS_LIST=",
@" (ADDRESS=",
@" (PROTOCOL=TCP)",
@" (HOST=171.0.0.132)",
@" (PORT=1521)",
@" )",
@" )",
@" (CONNECT_DATA=",
@" (SERVICE_NAME=TESTDB)",
@" )",
@" );",
@"Persist Security Info=True;",
@"User Id=用户名;",
@"Password=密码"
);
//OracleConnection 被标注为已过时
OracleConnection oc = new OracleConnection(conn);
try
{
oc.Open();
//OracleCommand 被标注为已过时
OracleCommand cmd = oc.CreateCommand();
cmd.CommandText = "select sysdate from dual";
OracleDataReader odr = cmd.ExecuteReader();
while (odr.Read())
{
Console.WriteLine(odr.GetOracleDateTime(0).ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
oc.Close();
}
}
static void Main(string[] args)
{
ReadFromOracleTest();
Console.ReadLine();
}
}
}
5.运行示例
END