SQL那些事儿(十四)--C#调用oracle存储过程(查询非查询and有参无参)深度好文

本文分享了作者在使用存储过程中遇到的问题及解决经验,包括无参数、输入参数、输出参数的非查询存储过程,以及返回DataTable和DataReader的查询存储过程的创建与调用方法。强调了Oracle存储过程名称大小写规则及其在C#中的应用。附带了一个改造后的sqlhelper类代码。
摘要由CSDN通过智能技术生成

最近老总让使用存储过程,说这个比较好用,抓起本oracle书看了看,写存储过程不是很难,但是写了存储过程调用的时候遇到许多问题,经过一天时间,把各种能遇到i的问题基本总结了下,跟大家分享。

照例画了张图,先了解下各种调用oracle存储过程的情形:


(这里自己创建了一个sqlhelper类,C#调用的时候用到了这个,这个类放到了末尾)

一、非查询存储过程

1、无参数

创建存储过程

CREATE OR REPLACE 
PROCEDURE "USP_XCY" AS
BEGIN
	UPDATE T_CITY set F_INFO='info' WHERE F_ID='140100';
END;


调用存储过程

            string proName = "usp_xcy";
            int result = SQLHelper.ExcuteProc(proName);


2、输入参数

创建存储过程

CREATE OR REPLACE 
PROCEDURE "USP_SELECT" (parm_id  VARCHAR2)
AS
BEGIN
		UPDATE T_CITY set F_INFO='info' WHERE F_ID=parm_id;
END;
 


 调用存储过程

            string input = "140200";
            string proName = "USP_SELECT";
            OracleParameter[] param = new OracleParameter[1];
            param[0] = new OracleParameter("parm_id", OracleDbType.Varchar2, input, ParameterDirection.Input);
            int result = SQLHelper.ExcuteProc(proName, param);


3、输出参数

创建存储过程

CREATE OR REPLACE 
PROCEDURE "USP_OUT" (parm_name IN VARCHAR2,parm_count OUT NUMBER )
AS
BEGIN
	-- routine body goes here, e.g.
	-- DBMS_OUTPUT.PUT_LINE('Navica t for Oracle');
  SELECT COUNT(*) INTO parm_count FROM T_CITY WHERE T_CITY.F_NAME like '%'||parm_name||'%';

END ;


 调用存储过程

            string input = "市";
            string output = "";
            string proName = "USP_OUT";
            OracleParameter[] param = new OracleParameter[2];
            param[0] = new OracleParameter("parm_name", OracleDbType.Varchar2, input, ParameterDirection.Input);
            param[1] = new OracleParameter("parm_count", OracleDbType.Int32, output, ParameterDirection.Output);
            int result = SQLHelper.ExcuteProc(proName, param);
            output = param[1].Value.ToString();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值