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. 微信支付报ip错,怀疑是因为不能正确获取$_Server[addr])ip导致的

    报如下错误,应该是本地测试环境不能正确获取客户ip导致的错误 果然 放到服务器上在测试就好了

  2. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  3. UVA 11478 Halum

    Halum Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 114 ...

  4. iis解析json

    一. windows XP 1. MIME设置:在IIS的站点属性的HTTP头设置里,选MIME 映射中点击”文件类型”-”新类型”,添加一个文件类型:关联扩展名:*.json内容类型(MIME):a ...

  5. COGS——T 438. 烦人的幻灯片

    http://www.cogs.pro/cogs/problem/problem.php?pid=438 ★☆   输入文件:slides.in   输出文件:slides.out   简单对比时间限 ...

  6. MySQL优化之——集群搭建步骤具体解释

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46833179 1 概述 MySQL Cluster 是MySQL 适合于分布式计算 ...

  7. 关于Thread的那些事

    关于Thread的那些事 1 : 你能够调用线程的实例方法Join来等待一个线程的结束.比如: public static void MainThread() { Thread t = new Thr ...

  8. C中操作文件的几种模式

    使用文件的方式共同拥有12种,以下给出了它们的符号和意义.  文件打开方式  意义 rt  仅仅读打开一个文本文件.仅仅同意读数据  wt  仅仅写打开或建立一个文本文件,仅仅同意写数据  at  追 ...

  9. 浅谈SaaS应用开发的难度

    近期做SaaS应用的非常多,这样的模式是未来的一种趋势,这样的模式的最大优点就是云计算的优点--节约资源.网上有非常多人觉得SaaS非常easy,就是一个多用户租赁模式.这样的认识也不能说不正确.由于 ...

  10. cocos2d-x 移植到android中编译的一些问题:fatal error: Box2D/Box2D.h: No such file or directory&quot;

    1.fatal error: Box2D/Box2D.h: No such file or directory" 须要加入box2d库的支持,改动android.mk文件,例如以下: 查看文 ...