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

    }

}
相关推荐
witton1 小时前
Go语言网络游戏服务器模块化编程
服务器·开发语言·游戏·golang·origin·模块化·耦合
枯萎穿心攻击2 小时前
ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
开发语言·unity·c#·游戏引擎
Jerry Lau2 小时前
go go go 出发咯 - go web开发入门系列(一) helloworld
开发语言·前端·golang
nananaij2 小时前
【Python基础入门 re模块实现正则表达式操作】
开发语言·python·正则表达式
Micro麦可乐2 小时前
Java常用加密算法详解与实战代码 - 附可直接运行的测试示例
java·开发语言·加密算法·aes加解密·rsa加解密·hash算法
天下一般2 小时前
go入门 - day1 - 环境搭建
开发语言·后端·golang
雷羿 LexChien2 小时前
C++内存泄漏排查
开发语言·c++
小码编匠2 小时前
WPF 自定义TextBox带水印控件,可设置圆角
后端·c#·.net
水果里面有苹果3 小时前
17-C#的socket通信TCP-1
开发语言·tcp/ip·c#
手握风云-3 小时前
JavaEE初阶第七期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(五)
java·开发语言