vb.net oracle 调取,以下以vb.net 代码为例,c#差不多

    Dim cn As OracleConnection = New OracleConnection(cn_str)     Dim cm As New OracleCommand("", cn)     Dim da As OracleDataAdapter = New OracleDataAdapter(cm)     Dim ds As DataSet = New DataSet("DATATABLE")

示例部分代码有略,请选择参考

1,存储参数含SYS_REFCURSOR

CREATE OR REPLACE procedure wx_user_pay_info5(p1 in number,OUTPUT_KEY_STR IN LONG,p_return OUT SYS_REFCURSOR) is

key_true VARCHAR2(10);

begin

if (test_user_code5(p1,OUTPUT_KEY_STR)='false') then     open p_return for     select 'error_message' as item,'invalid_USERCODE' as error_message from dual; else

    open p_return for     select * from user_month_degree where user_code=p1 and count_mark=1;

end if;

end; /

*******************************vb.net代码,*************************************       cm.CommandText = "wx_user_pay_info5"       cm.CommandType = CommandType.StoredProcedure

         '增加其它参数         cm.Parameters.Add("p1", USER_CODE).Direction = ParameterDirection.Input         cm.Parameters.Add("OUTPUT_KEY_STR", outputkey).Direction = ParameterDirection.Input

        '调用oracle函数参数按顺序,否则出错         cm.Parameters.Add("p_return", OracleDbType.RefCursor).Direction = ParameterDirection.Output

        '比较全的 增加参数 参数名,参数类型,值大小,值,输入输出类型         'cm.Parameters.Add("user_code", OracleDbType.Varchar2, 50, 81010001, ParameterDirection.Input)

        Try             da.Fill(ds, "Rows")  'table0         Catch ex As Exception             'Return ex.Message             Return "100"         Finally             cm.Parameters.Clear()  '清除参数,以免下次查询出错         End Try

*****************************************************************************

2,函数返回值是 SYS_REFCURSOR

create or replace FUNCTION cr_user_pay_info3(USER_CODE_STR IN VARCHAR2) RETURN SYS_REFCURSOR  is     type_cur SYS_REFCURSOR; begin

 open type_cur for select * from user_month_degree where user_code=USER_CODE_STR and count_mark=1;

 RETURN  type_cur;

end; /

******************************vb.net 代码*******************************************

       cm.CommandText = "cr_user_pay_info3"        cm.CommandType = CommandType.StoredProcedure

        '先加返回的这个参数,参数名PO_RETURN可以随意取,不违反规则就行         cm.Parameters.Add("PO_RETURN", OracleDbType.RefCursor).Direction = ParameterDirection.ReturnValue

        '增加其它参数         cm.Parameters.Add("USER_CODE_STR", USER_CODE_STR).Direction = ParameterDirection.Input

        '比较全的 增加参数 参数名,参数类型,值大小,值,输入输出类型         'cm.Parameters.Add("user_code", OracleDbType.Varchar2, 50, 81010001, ParameterDirection.Input)

        Try             da.Fill(ds, "Rows")  'table0         Catch ex As Exception             'Return ex.Message             Return "100"         Finally             cm.Parameters.Clear()  '清除参数,以免下次查询出错         End Try

*********************************************************************************

3,函数的返回值是VARCHAR2

CREATE OR REPLACE FUNCTION D_GET_OUTPUTKEY ( OUTPUT_CODE_STR IN VARCHAR2,                   --用户工号 OUTPUT_PASS_STR IN VARCHAR2,                  --用户密码 DO_STYLE IN VARCHAR2 DEFAULT 'TRUE'        --TRUE每次调用更换新通行码(TRUE或FALSE) ) RETURN VARCHAR2 AS

USER_NUM NUMBER;        --用户数 OUTPUT_DATE_STR    DATE;         --用户码生成时间 OUTPUT_KEY_STR VARCHAR2(100);   --返回通行码

BEGIN

IF NOT USER_NUM=1 THEN   --用户工号或密码错误   RETURN '0';

ELSE     RETURN OUTPUT_KEY_STR; END IF;

EXCEPTION

    WHEN OTHERS THEN

    RETURN '100';    --其它错误

END D_GET_OUTPUTKEY; /

**************************************vb.net代码*********************************************************         cm.CommandText = "D_GET_OUTPUTKEY"         cm.CommandType = CommandType.StoredProcedure

        '调用oracle函数参数要先加下面这行。否则出错。100表接收字符的大小         cm.Parameters.Add("PO_RETURN", OracleDbType.Varchar2, 100).Direction = ParameterDirection.ReturnValue

        cm.Parameters.Add("OUTPUT_CODE_STR", OUTPUT_CODE_STR).Direction = ParameterDirection.Input         cm.Parameters.Add("OUTPUT_PASS_STR", OUTPUT_PASS_STR).Direction = ParameterDirection.Input

        Try             cn.open             cm.ExecuteNonQuery()             Return cm.Parameters("PO_RETURN").Value.ToString() '读取返回值         Catch ex As Exception             'Return ex.Message             Return "100" '未知错误         Finally             cn.close             cm.Parameters.Clear()  '清除参数,以免下次查询出错         End Try

oracle的调取 参数格式不同,记录下,方便自己也方便别人。

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: