C#调用Oracle数据库
目前为止所用过的c#访问orale数据库的方式有两种,一种是使用Oracle.ManagedDataAccess.Client方式来调用,另一种是使用System.Data.OracleClient方式来调用,两者的区别是第一种方式是最新的方式,使用起来也比第二种方式要简单的多,但是缺点可能无法访问旧版的Oracle数据库例如 9i,尤其是当oracle数据库的各种权限、角色等各种参数由于各种原因
目前为止所用过的c#访问orale数据库的方式有两种,一种是使用 Oracle.ManagedDataAccess.Client方式来调用,另一种是使用System.Data.OracleClient方式来调用,两者的区别是第一种方式是最新的方式,使用起来也比第二种方式要简单的多,但是缺点可能无法访问旧版的Oracle数据库例如 9i,尤其是当oracle数据库的各种权限、角色等各种参数由于各种原因不允许对其修改时可能会无法访问的情况,第二种方式是一种过时的方式,它的优点是可以弥补第一种方式的缺陷可以对旧版本和新版本的oracle数据都进行访问,但是它在使用起来比较繁琐,需要安装oracle客户端已经配置环境变量等步骤,所以个人建议能用第一种方式的话就优先选择如果不能用第一种方式在改用第二种方式。
一、Oracle.ManagedDataAccess.Client方式
1、添加引用
在NuGet管理包中下载Oracle.ManagedDataAccess.Client
打开项目选中引用,右键选择管理NuGet程序包
输入 Oracle.ManagedDataAccess.Client查询出来后选择并进行安装
2、程序调用
using System.Data;
using Oracle.ManagedDataAccess.Client;
namespace QualityInspection
{
public class OracleHelper
{
private static string _connNow = "User Id=用户名;Password=密码;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=OracleIP地址)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=服务名称)))";
public static DataTable ExecuteNowDataTable(string sql, params OracleParameter[] parameters)
{
using (OracleConnection conn = new OracleConnection(_connNow))
{
conn.Open();
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
DataTable datatable = new DataTable();
adapter.Fill(datatable);
return datatable;
}
}
}
}
}
using System.Text;
using System.Data;
using Oracle.ManagedDataAccess.Client;
namespace QualityInspection
{
public class Oracle
{
object _nowLock = new object();
/// <summary>
/// 根据身份证号从当前库中获取标准照片号
/// </summary>
/// <param name="idcard">身份证号</param>
/// <param name="photoNo">照片号</param>
/// <returns></returns>
public DataTable GetNowPhotoNoByIdCardCode(string idcard)
{
lock (_nowLock)
{
string photoNo = string.Empty;
DataTable dataTable = new DataTable();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.Append("select photo_no from PROD_CARD_T t where t.ID_NO=:id order by photo_no desc");
dataTable = OracleHelper.ExecuteNowDataTable(sqlBuilder.ToString(), new OracleParameter(":id", idcard));
return dataTable;
}
}
}
}
public void GetOracleData()
{
Oracle oracle = new Oracle();
//从当前库中获取照片序号
DataTable photoTable = oracle.GetNowPhotoNoByIdCardCode(idCard);
}
二、System.Data.OracleClient方式
1、下载oracle客户端和PLSQL(PLSQL的使用在第三部分讲解),这里的32位和64位和操作系统没关系但是和你的程序版本有关系(oracle客户端和你的程序配置;PLSQL和客户端配置),如果你的程序是64位的则下载64位的,如果程序是32位的或者是ANY CPU(winform)则选择32位的
64位https://download.csdn.net/download/liudexin1985/24124640https://download.csdn.net/download/liudexin1985/2412464032位https://download.csdn.net/download/liudexin1985/24126555https://download.csdn.net/download/liudexin1985/241265552、修改tnsnames.ora文件
# tnsnames.ora Network Configuration File: F:\app\Administrator\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
名称1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleIP地址1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = 服务名称1)
)
)
名称2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleIP地址2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = 服务名称2)
)
)
3、配置环境变量
新增环境变量:
变量名:ORACLE_HOME
变量值:D:\instantclient_11_2(客户端所在目录位置)
变量名:TNS_ADMIN
变量值:D:\Program Files\instantclient\network\admin\(tnsnames.ora文件所在目录)
变量名:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
修改系统变量:
修改Path变量,在变量值的最后面添加 ;D:\instantclient_11_2(客户端所在目录位置)
4、添加引用
5、程序调用
using System;
using System.Data;
namespace QualityInspection
{
public class OracleHelper
{
private static string _connHistory = "data source=数据库名称(和tnsnames.ora文件中的一致);user=用户名;password=密码;";
static object _historyLock = new object();
public static DataTable ExecuteHistoryDataTable(string idCard)
{
lock (_historyLock)
{
DataTable dataTable = new DataTable();
System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand();
System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(_connHistory);//进行连接
cmd.Connection = conn;
string sql = "select PHOTO_NO from HIS_CARD_T t where t.ID_NO= '" + idCard + "' order by PHOTO_NO desc";
System.Data.OracleClient.OracleDataAdapter oda = new System.Data.OracleClient.OracleDataAdapter(sql, conn);
try
{
conn.Open();
DataTable data = new DataTable();
oda.Fill(data);
DataSet dt = new DataSet();
oda.Fill(dt, "PROD_CARD_T");
dataTable = dt.Tables[0];
}
catch (Exception ex)
{
//Log.Debug("查询身份证头像历史库异常,异常原因:" + ex.Message);
}
finally
{
conn.Close();
}
return dataTable;
}
}
}
}
public void GetHistoryDataTable()
{
string idCard = "";
photoTable = OracleHelper.ExecuteHistoryDataTable(idCard);
}
三、安装并配置PLSQL
1、下载Oracle客户端和PLSQL
参照第二部分第一段中的内容
2、修改tnsname.org
参周第二部分第一段中的内容
3、配置PLSQL
登录PLSQL然后依次点击工具—连接配置oracle 主目录名路径和oci库路径,其中Oracle主目录名为客户端所在目录,oci库为客户端目录下的oci.dll文件
4、重启PLSQL登录数据库
更多推荐
所有评论(0)