• C#调用Oracle存储过程的方法


    准备:

    环境:pl/sql+oracle9i+vs2008

    创建表test:

    create table TEST
    (
      ID      NUMBER,//编号
      NAME    VARCHAR2(10),//姓名
      SEX     VARCHAR2(2),//性别
      AGE     NUMBER,//年龄
      ADDRESS VARCHAR2(200)//住址
    )

    1.执行不带参数的Oracle存储过程:

    首先编写一个不带参数的oracle存储过程:

    create or replace procedure proc1
    is
    begin  insert into test(ID,name,sex,age) values(1,'liheng','男',25);
    commit;//记得写上这段事务提交语句
    end;

    C#调用代码如下:

                OracleConnection conn = new OracleConnection("server=cw;uid=ls0019999;pwd=aaaaaa");
                conn.Open();
                OracleCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;//指明是执行存储过程
                cmd.CommandText = "proc1";
                cmd.ExecuteNonQuery();
                conn.Close();

    2.执行输入类型参数的存储过程:

    首先编写一个输入类型参数的存储过程:

    create or replace procedure proc2
    (
    v_id number,
    v_name varchar2
    )
    is
    begin
    insert into test(id,name) values(v_id,v_name);
    commit;
    end;

    C#调用代码如下:

               //在传入参数的过程中,我用了两个文本框来接受用户输入的参数,并且做了个简单的校验

               if (string.IsNullOrEmpty(this.textBox1.Text))
                {
                    MessageBox.Show("编号不能为空!");
                    this.textBox1.Focus();
                    return;
                }
                if (string.IsNullOrEmpty(this.textBox2.Text))
                {
                    MessageBox.Show("姓名不能为空!");
                    this.textBox2.Focus();
                    return;
                }
                OracleConnection conn = new OracleConnection("server=cw;uid=ls0019999;pwd=aaaaaa");
                conn.Open();
                OracleCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "proc2";
                cmd.Parameters.Add("v_id", OracleType.Number).Direction = ParameterDirection.Input;//指明传入的参数是输入给oracle存储过程用的
                cmd.Parameters["v_id"].Value =this.textBox1.Text.Trim();
                cmd.Parameters.Add("v_name",OracleType.NVarChar).Direction = ParameterDirection.Input;//指明传入的参数是输入给oracle存储过程用的
                cmd.Parameters["v_name"].Value =this.textBox2.Text.Trim();
                cmd.ExecuteNonQuery();
                conn.Close();

    3. 执行输出类型参数的存储过程:

    首先编写一个输出类型的存储过程:

    create or replace procedure proc3
    (
    reccount out number
    )
    is
    begin
    select count(*) into reccount  from test;
    end;

    这段存储过程的意思求表中记录总数

    C#调用代码如下:

                OracleConnection conn = new OracleConnection("server=cw;uid=ls0019999;pwd=aaaaaa");
                conn.Open();
                OracleCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "proc3";
                cmd.Parameters.Add("reccount",OracleType.Number).Direction = ParameterDirection.Output;
                cmd.ExecuteNonQuery();

                //这里我用了一个文本框来接受执行存储过程之后返回的参数值
                this.textBox3.Text=cmd.Parameters["reccount"].Value.ToString();

    总结:

    以上代码都成功运行,可以照我这个进行扩展延伸,道理都是一样的,结果是不同的。

  • 相关阅读:
    Ubuntu Linux Matlab 安装 中文乱码 桌面启动器 Could not find the main class: java/splash.png. 终端terminal 直接运行 matlab
    Ubuntu Linux 官网 u盘安装 u盘系统 图文教程
    从google map google earth获得大图 方法总结
    论文查重网址
    [ZZ] Computer Science Conference Rankings
    Ubuntu linux 信使 iptux Window 飞鸽 ipmsg 飞秋 feiq 文件传输
    Ubuntu Linux Matlab mex
    Ubuntu Dell OptiPlex 990 Intel Gigabit CT Desktop Adapter网卡驱动安装
    C++的File类文件操作
    GIS软件比较
  • 原文地址:https://www.cnblogs.com/ok519/p/2668919.html
Copyright © 2020-2023  润新知