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


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

    总结:

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

  • 相关阅读:
    数据库的架构和优化
    描述一个高性能高可靠的网站架构——如何设计一个秒杀系统
    PHP手册-函数参考-加密扩展
    系统性能指标总结
    PHP实现负载均衡的加权轮询
    PHP生成二维码
    高性能网站架构
    PHP实现Redis的数据结构和LFU/LRU
    缓存的设计及PHP实现LFU
    网络开发库从libuv说到epoll
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3379167.html
Copyright © 2020-2023  润新知