使用 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 函数的区别](#Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别)

[1 命令文本的区别](#1 命令文本的区别)

[2 命令类型的区别](#2 命令类型的区别)

[3 代码示列:](#3 代码示列:)


Oracle.DataAccess.Client 驱动:

OracleCommand.CommandType = CommandType.StoredProcedure;

OleDB 驱动:

OleDBCommand.CommandType = CommandType.Text;

3 代码示列:

cs 复制代码
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();

    }

}
相关推荐
小徐敲java16 小时前
python使用opcua的订阅和mqtt
开发语言·python
良木林16 小时前
Node.js基础:模块化与包
开发语言·前端·node.js
带土117 小时前
1. Qt-的安装和环境变量的配置
开发语言·qt
q***d17317 小时前
Rust并发模型
开发语言·后端·rust
Charles_go17 小时前
C#中级48、Debug版本和Release版本有什么区别
java·linux·c#
CircleMouse17 小时前
介绍几个axios接口请求顺序的问题
开发语言·前端·javascript·ecmascript
baivfhpwxf202318 小时前
用TCP服务端向多个客户端分发图片,客户端接收并处理图片,再将处理结果返回给服务端
服务器·开发语言·网络·tcp/ip·c#
资深web全栈开发18 小时前
Golang Cobra 教程:构建强大的CLI应用
开发语言·后端·golang
J***793918 小时前
Python在机器学习中的数据处理
开发语言·python·机器学习