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的调取 参数格式不同,记录下,方便自己也方便别人。
精彩内容
发表评论