C#调用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/24124640icon-default.png?t=L892https://download.csdn.net/download/liudexin1985/2412464032位https://download.csdn.net/download/liudexin1985/24126555icon-default.png?t=L892https://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登录数据库

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将DataTable中的时间格式数据插入到Oracle数据库时,需要注意以下几点: 1. 确保DataTable中的时间格式与Oracle数据库中的时间格式匹配。 2. 将时间格式转换为Oracle数据库中支持的时间格式。例如,Oracle数据库中常用的时间格式为“YYYY-MM-DD HH24:MI:SS”。 3. 使用OracleDataAdapter和OracleCommand对象进行数据插入操作。在将数据插入到Oracle数据库中时,应该使用参数化查询,以避免SQL注入和其他安全问题。 下面是一个示例代码,演示如何将DataTable中的数据插入到Oracle数据库中: ```csharp using System.Data; using Oracle.ManagedDataAccess.Client; // 假设DataTable中有一个名为“myTable”的表格,其中包含一个名为“myDate”的列,其数据类型为DateTime。 DataTable myTable = new DataTable(); // 填充DataTable的代码... // 建立与Oracle数据库的连接 string connectionString = "Data Source=<dataSource>; User ID=<userId>; Password=<password>"; using (OracleConnection connection = new OracleConnection(connectionString)) { connection.Open(); // 创建OracleDataAdapter对象 OracleDataAdapter adapter = new OracleDataAdapter(); // 创建INSERT命令 adapter.InsertCommand = new OracleCommand("INSERT INTO myTable (myDate) VALUES (:myDate)", connection); // 添加参数 adapter.InsertCommand.Parameters.Add(":myDate", OracleDbType.Date); // 遍历DataTable中的每一行,将数据插入到Oracle数据库中 foreach (DataRow row in myTable.Rows) { // 将时间格式转换为Oracle数据库中支持的时间格式 DateTime dateValue = (DateTime)row["myDate"]; string oracleDateValue = dateValue.ToString("yyyy-MM-dd HH:mm:ss"); // 设置参数值 adapter.InsertCommand.Parameters[":myDate"].Value = oracleDateValue; // 执行INSERT命令 adapter.InsertCommand.ExecuteNonQuery(); } } ``` 请注意,以上示例代码仅供参考,实际应用时需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值