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

    总结:

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

  • 相关阅读:
    6_java_maven
    线性代数 linear algebra
    hadoop_wordcount_1027
    hadoop_worddistinct_1030
    hadoop_wordcount_1023
    搭建伪分布式_笔记
    linux-sunrpc
    linux-volatile
    linux---asmlinkage
    dqs_linux-1
  • 原文地址:https://www.cnblogs.com/ok519/p/2668919.html
Copyright © 2020-2023  润新知