使用 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();

    }

}
相关推荐
初学者,亦行者2 分钟前
Rayon并行迭代器:原理、实践与性能优化
java·开发语言·spring·rust
我想进大厂15 分钟前
Python---数据容器(Set 集合)
开发语言·python
wu_jing_sheng01 小时前
销售数据分析
开发语言·python
haofafa1 小时前
STL之动态数组
开发语言·c++
earthzhang20212 小时前
【2051】【例3.1】偶数
开发语言·数据结构·算法·青少年编程·图论
专注VB编程开发20年2 小时前
.net c#音频放大,音量增益算法防止溢出
算法·c#·音频处理·录音·音量增益·增益控制
专注VB编程开发20年2 小时前
.NET Reflector反编绎,如何移除DLL中的一个公开属性
开发语言·c++·c#
vxiam14xxx2 小时前
【Java Swing 项目】java 聊天系统
java·开发语言·python
znhy@1233 小时前
十三、JS进阶(二)
开发语言·前端·javascript
@木辛梓3 小时前
Linux 线程
linux·开发语言·c++