C#调用存储过程和函数

来源:互联网 发布:beoplayer安卓版 软件 编辑:程序博客网 时间:2024/06/03 03:48

1、调用存储过程

1)存储过程

下面是一个简单的存储过程,调用时更新描述信息

PROCEDURE TEST(p_user_name VARCHAR2)  IS    BEGIN         IF p_user_name IS NOT NULL THEN            UPDATE k_users ku                SET ku.description='测试'                WHERE ku.user_name=p_user_name;         END IF;     END;

2)C#调用

 private void btnLogin_Click(object sender, EventArgs e)        {            string result=string.Empty;            string sql = "MY_PUBLIC_PCK.TEST";            OracleParameter op1 = new OracleParameter("p_user_name", OracleDbType.Varchar2);            op1.Direction = ParameterDirection.Input;            op1.Value = this.tbUserName.Text;            try            {                OracleConnection myConnect = new OracleConnection(constr);                OracleCommand myCmd = new OracleCommand(sql,myConnect);                myCmd.CommandType = CommandType.StoredProcedure;                myConnect.Open();                myCmd.Parameters.Add(op1);                myCmd.ExecuteNonQuery();            }            catch (Exception ex)            {                this.tbUserName.Text = ex.ToString();            }        }
 OracleParameter op =new OracleParameter(string parameterName,OracleDbType oraType,int size)
parameterName是参数名称,oraType是参数的类型,size值参数的长度
 myCmd.CommandType = CommandType.StoredProcedure; op1.Direction = ParameterDirection.Input;
CommandType.StoredProcedure指定操作的类型是存储过程
ParameterDirection.Input 参数传递的方向,Input为输入参数,Out为输出参数,ReturnValue接收返回值

2、调用函数

1)函数

函数的定义和存储过程的定义是一样的,只不过函数必须要有返回值
FUNCTION TEST1(p_name VARCHAR2)  RETURN VARCHAR2 IS    BEGIN      RETURN  'Good Morning ,'||p_name;                                                     END;

2)C#调用

  private void btnLogin_Click(object sender, EventArgs e)        {            string sql = "MY_PUBLIC_PCK.TEST1";            OracleParameter op1 = new OracleParameter("result", OracleDbType.Varchar2, 20);            OracleParameter op2 = new OracleParameter("p_user_name", OracleDbType.Varchar2);            op1.Direction = ParameterDirection.ReturnValue;            op2.Direction = ParameterDirection.Input;            op2.Value = this.tbUserName.Text;            try            {                OracleConnection myConnect = new OracleConnection(constr);                OracleCommand myCmd = new OracleCommand(sql,myConnect);                myCmd.CommandType = CommandType.StoredProcedure;                myConnect.Open();                myCmd.Parameters.Add(op1);                myCmd.Parameters.Add(op2);                myCmd.ExecuteNonQuery();                MessageBox.Show(op1.Value.ToString());               }            catch (Exception ex)            {                this.tbUserName.Text = ex.ToString();            }

这里写图片描述

 op1.Direction = ParameterDirection.ReturnValue;

如果传给后台的参数的方向是ReturnValue,即有返回值,那么调用的StoredProcedure将会被识别成函数。

OracleParameter op1 = new OracleParameter("result", OracleDbType.Varchar2, 20);

接收返回值的参数必须要定义长度大小,不然会报错

还有一点需要注意的是函数返回的值会return到myCmd.Parameters的第一个参数中,把上面的顺序改一下也会报错

 myCmd.Parameters.Add(op2); myCmd.Parameters.Add(op1);
原创粉丝点击