C# 调用存储过程

參考了非常多文章,写了例如以下文字,算是分享吧

目的:更改积分,并作一定校验

一、一般的调试方法:

方法一:带返回out參数,必须定义变量 myresult

DECLARE

myresult INT;

point  VARCHAR2(50) ; //假设要用字符类的变量,须要写长度。

BEGIN 

  P_CHANGEVIPBALANCE('011111111',-1,'TEST',myresult);

END;

/*

假设不带输出參数。则能够直接用:

方法二:call   P_CHANGEVIPBALANCE('018604712233',-1,'TEST');//如果本身就没有要输出的參数。即存储过程定义为:

CREATE OR REPLACE PROCEDURE WX_120719_FLXT.p_changevipbalance ( vipno IN VARCHAR2 , point in VARCHAR2, str_reason IN VARCHAR2  )  //相比之前的没有:,myresult OUT int 这个out 參数  */

方法三:

更具体的调试方法还是PLSQL。选择要调试的过程名,找test。假设不能进入到里面去。好像要要编译,生成debug信息之类的。

二、存储过程定义:2015-7-18 20:00:21更新备注计算方法

CREATE OR REPLACE PROCEDURE WX_120719_FLXT.p_changevipbalance ( vipno IN VARCHAR2 , point in VARCHAR2, str_reason IN VARCHAR2 ,myresult OUT int )





IS

    point_old     INT;

    point_updated INT;

    yhjerror      EXCEPTION;

    tempint       INT;

    tempa         INT;

BEGIN

    myresult:=0;





    SELECT M.POINTS

      INTO point_old

      FROM MEMBERSHIP M

     WHERE TRIM(M.MEMBER_CODE) =vipno;





    UPDATE MEMBERSHIP M

           SET  M.POINTS= M.POINTS+point,

           M.REMARK=TRIM(M.REMARK)||TO_CHAR(SYSDATE,'YY-MM-DD HH24:MI:SS')||':'||str_reason

     WHERE TRIM(M.MEMBER_CODE)=vipno;



    myresult:=SQL%ROWCOUNT;

    dbms_output.put_line(point_old);

    SELECT M.POINTS

      INTO point_updated

      FROM MEMBERSHIP M

     WHERE TRIM(M.MEMBER_CODE) =vipno;





    tempa:=ABS((point_old)-(point_updated));

     tempint:=ABS(point);





    IF ((tempa <>tempint ) or  (myresult<>1)) THEN -- AND

        BEGIN

            myresult:=0;

            RAISE yhjerror;

        end;

    END IF ;

EXCEPTION

WHEN yhjerror THEN

    BEGIN

        ROLLBACK;

    END;

    COMMIT;

END p_changevipbalance;

三、存储过程被C#调用。代码:

public static String CAL_changevipbalancebyStoredProcedure(string vipno, int point, string str_reason )

        {//须要添加日志

            string strCmd = OracleAccess.str_vip_update1 + point + OracleAccess.str_vip_update2 + vipno.Trim() + "\'";

            int old_points = 0; int after_point = 0; int kkk = 0; int myresult = 0;

            //i = Convert.ToInt32(DBUtil.SqlExecuteScalar(strCmd.Replace("TESTA", OracleAccess.str_USER)));

            if (exist_vip(vipno))

            {

                old_points = int.Parse(CAL_VipBalance(vipno));

                OracleParameter[] parameters ={

                                 new OracleParameter("vipno",OracleType.VarChar,50),

                                new OracleParameter("point",OracleType.VarChar,30),

                                 new OracleParameter("str_reason",OracleType.VarChar,20),

                                new OracleParameter("myresult",OracleType.Int32)

                                                };

                parameters[0].Value = vipno; parameters[1].Value = point; parameters[2].Value = str_reason; parameters[3].Value = myresult;  //parameters[13].Value = str_sku;// parameters[10].Value = str_no; parameters[11].Value = str_sku;

                parameters[0].Direction = ParameterDirection.Input; parameters[1].Direction = ParameterDirection.Input; parameters[2].Direction = ParameterDirection.Input; parameters[3].Direction = ParameterDirection.Output;



                try

                {

                    YHJ_StoredProcedure.RunProcedure("WX_120719_FLXT.p_changevipbalance", parameters);

                    kkk = Convert.ToInt32(parameters[3].Value);

                    if (kkk>=1)

                        return OracleAccess.str_db_operate_sucess;

                        else

                    return "ERROR内部校验出错";





                }

                catch (Exception e)

                {

                    throw e;

                }



                //DBUtil.SqlExecuteNonQuery(strCmd.Replace("TESTA", OracleAccess.str_USER)); //ok 防注入,不用

                //after_point = int.Parse(CAL_VipBalance(vipno));

                //if ((after_point - old_points) == point)

                //    return OracleAccess.str_db_operate_sucess;

                //else

                //    return "ERROR内部校验出错";

            }

            else

                return "ERROR会员不存在";

            //return Convert.ToInt32(DBUtil.SqlExecuteScalar(strCmd.Replace("TESTA", OracleAccess.str_USER)));

        }

oracle 存储过程定义及调试,并终于被C# 调用 代码的更多相关文章

  1. oracle 存储过程 clob 字段 调试

    clob 没法直接赋值调试,可以新建一个存储过程,赋值给clob字段,然后调试

  2. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  3. JDBC调用oracle 存储过程

    1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中. --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用 ...

  4. Oracle存储过程单步调试方法

    oracle存储过程单步调试的方法 1.在要调试的过程上单击test,如下图所示: 2.出现如下界面时单击最左上方的按钮:,如下图所示: 3.单击后呈现如下画面: 其中: 表示要停止test; 表示要 ...

  5. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  6. Oracle存储过程学习使用

    存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值 ...

  7. oracle存储过程 --1

    一,oracle存储过程语法   1.oracle存储过程结构  CREATE OR REPLACE PROCEDURE oracle存储过程名字 (     参数1 IN NUMBER,     参 ...

  8. oracle 存储过程的基本语法

    原文:oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) I ...

  9. Oracle存储过程和自定义函数

    新博客文章链接,欢迎大家评论探讨 概述 存储过程和存储函数是指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 异同点: 存储过程和存储函数的相同点:完成特定功能的程序. 存储过程和存储 ...

随机推荐

  1. 关于Servo项目中Rust代码行数的数据来源

    我两个月之前的一篇博客<为什么我说Rust是靠谱的编程语言>(下面简称原文),在当中"6. 两个半大型成功案例"一节.我以前写道: Servo: 下一代浏览器渲染引擎( ...

  2. 算法 - 求一个数组的最长递减子序列(C++)

    //************************************************************************************************** ...

  3. 从ORA-27300,ORA-27301到ORA-00064

        近期因为session数量添加,须要调整session,也就是要调整process參数. 看是比較简单的一个问题,却遭遇了ORA-27300,ORA-27301.因为这个涉及到了有关内核參数k ...

  4. 百度地图-----&gt;地图类型、定位模式、实时交通、我的位置、加入覆盖物、覆盖物详情及提示

    在百度地图开发平台 http://developer.baidu.com/map/index.php? title=androidsdk 进行创建应用,获取应用的AK,在进行下载BaiduLBS_An ...

  5. Codeforce 163 A. Substring and Subsequence DP

    A. Substring and Subsequence   One day Polycarpus got hold of two non-empty strings s and t, consist ...

  6. JAVA设计模式之【模板方法模式】

    模板方法模式 提高代码的复用性 把常用的基本方法放入父类中 强调一种流程步骤 角色 抽象类 抽象方法 具体方法 钩子方法 空方法 通过bool控制 具体类 看例子 1.银行模板类 package Te ...

  7. 超便携式截屏录屏软件FastStone Capture

    超便携式截屏录屏软件FastStone Capture

  8. ElasticSearch 深入理解 三:集群部署设计

    ElasticSearch 深入理解 三:集群部署设计 ElasticSearch从名字中也可以知道,它的Elastic跟Search是同等重要的,甚至以Elastic为主要导向. Elastic即可 ...

  9. [jzoj 5930] [NOIP2018模拟10.26】山花 解题报告 (质因数分类)

    题目链接: http://172.16.0.132/senior/#contest/show/2538/2 题目: 小S决定从某一个节点$u$开始对其子树中与$u$距离小于$K$的节点代表的花树进行采 ...

  10. C#如何生成一个随机种子for Random?

    就这么写: Random rand = new Random((int)DateTime.Now.Ticks); 或者这么写: Random rand = new Random(new Guid(). ...