当前位置: 首页 > article >正文

使用 Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别

Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别

Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别主要体现在两个方面

1 命令文本的区别

CommandText:

Oracle.DataAccess.Client 驱动:

OracleCommand.CommandText ="Oracle函数名"

OleDB 驱动:

OleDBCommand.CommandText ="{ ? = call oracle函数名(?,?)}"

2 命令类型的区别 

CommandType

目录

Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别

1 命令文本的区别

2 命令类型的区别 

3 代码示列:


Oracle.DataAccess.Client 驱动:

OracleCommand.CommandType = CommandType.StoredProcedure;

OleDB 驱动:

OleDBCommand.CommandType = CommandType.Text;

3 代码示列:

using System;
using Oracle.DataAccess.Client;
using System.Data.OleDb;
using System.Data;

class Program

{
    //Oracle.DataAccess.Client;
    public void ExecuteOracleProcedure()

    {

        string oradb = "User Id=yourUsername;Password=yourPassword;Data Source=yourDataSource";

        OracleConnection conn = new OracleConnection(oradb);

        conn.Open();

        //OracleCommand.CommandText ="Oracle函数名";

        OracleCommand cmd = new OracleCommand("GET_EMPLOYEE_NAME", conn);

        //此处为 CommandType 取值CommandType.StoredProcedure,不能取CommandType.Text

        cmd.CommandType = CommandType.StoredProcedure;

        // 添加输入参数

        cmd.Parameters.Add("EMPLOYEE_ID", OracleDbType.Int32).Value = 123;

        // 添加输出参数

        cmd.Parameters.Add("EMPLOYEE_NAME", OracleDbType.Varchar2, ParameterDirection.Output).Size = 100;

        cmd.ExecuteNonQuery();

        // 获取输出参数的值

        string employeeName = cmd.Parameters["EMPLOYEE_NAME"].Value.ToString();

        Console.WriteLine("Employee Name: " + employeeName);

        conn.Close();

    }

    //oledb
    public void ExecuteOleDBProcedure()

    {

        string oradb = "Provider=OraOLEDB.Oracle.1;User Id=yourUsername;Password=yourPassword;Data Source=yourDataSource";
     
        OleDbConnection conn = new OleDbConnection(oradb);

        conn.Open();

        //OleDBCommand.CommandText ="{ ? = call oracle函数名(?,?)}";函数有几个参数就添加几个问号,问号有“,”隔开

        OleDbCommand cmd = new OleDbCommand("{ ? = call GET_EMPLOYEE_NAME(?,?)}", conn);

        //此处为 CommandType 取值CommandType.Text

        cmd.CommandType = CommandType.Text;

        // 添加输入参数

        cmd.Parameters.Add("EMPLOYEE_ID", OleDbType.Integer).Value = 123;
        cmd.Parameters["EMPLOYEE_ID"].Direction = ParameterDirection.Input;
        // 添加输出参数

        cmd.Parameters.Add("EMPLOYEE_NAME", OleDbType.VarChar).Size = 100;
        cmd.Parameters["EMPLOYEE_NAME"].Direction = ParameterDirection.Output;
        cmd.ExecuteNonQuery();

        // 获取输出参数的值

        string employeeName = cmd.Parameters["EMPLOYEE_NAME"].Value.ToString();

        Console.WriteLine("Employee Name: " + employeeName);

        conn.Close();

    }

}


http://www.kler.cn/a/402764.html

相关文章:

  • C++:探索AVL树旋转的奥秘
  • 深入解析 EasyExcel 组件原理与应用
  • 【Rhino】【Python】Create a series of Blocks according to Value of object Property
  • 自动驾驶概念
  • 【SKFramework框架】一、框架介绍
  • D73【 python 接口自动化学习】- python 基础之正则表达式
  • 【JAVA】Java基础—面向对象编程:常用API与数据结构—集合框架(List、Set、Map等)
  • 【Leecode】Leecode刷题之路第56天之合并区间
  • git创建远程仓库,以gitee码云为例GitHub同理
  • Go 1.23 is released(翻译)
  • c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除
  • pcap_set_timeout()函数
  • 文件 IO:高效读取文件的一些注意事项
  • SQL面试题——复杂窗口定义
  • 【机器学习chp5】线性回归
  • 【Python】30个Python爬虫的实战项目!!!(附源码)
  • 蓝牙电话-如何自动切换手机SIM卡(预研方向)
  • 985研一学习日记 - 2024.11.17
  • Map接口的特点
  • 使用 Postman 设置 Bearer Token 进行身份验证
  • 优化算法:粒子群算法
  • AI编程入门指南002:API、数据库和应用部署
  • 02向量与矩阵方程
  • Python学习30天
  • spring为何要用三级缓存
  • elasticsearch7.10.2集群部署带认证