精华内容
下载资源
问答
  • 最近实习公司的项目开发有遇到这么一个需求:做一个电价管理系统,有新增电价这么一个...新建一个存储过程对电价生效标志进行更新,然后job每天定时执行这个存储过程 sql语句如下:--create procedure cr

    最近在实习公司的项目开发中有遇到这么一个需求:在做一个电价管理系统中,有新增电价这么一个功能,新增电价默认不生效,用户可以手动选择生效的时间,到了时间电价就自动变成生效,如下图所示
    这里写图片描述
    在界面中是这样的
    这里写图片描述

    对于这个需求我们可以利用存储过程和job来实现。
    新建一个存储过程对电价生效标志进行更新,然后在job中每天定时执行这个存储过程
    sql语句如下:

    --create procedure 
    create or replace procedure p_carstatus as   
    begin   
     update e_price e set e.release_flag='是' where sysdate > e.release_date;
    COMMIT;
    end;
    
    --create job
    declare   
    jobno   number;   
    begin   
    dbms_job.submit(:jobno,'p_carstatus;',sysdate,'trunc(sysdate)+1');--每天凌晨,注意不要漏掉 jobno前面的:
    commit;
    end; 
    

    这样就能实现定时对电价生效标志进行更新了,以上只是一个例子,存储过程和job结合使用的例子还有很多。

    展开全文
  • Oracle存储过程中调用日志存储过程

    千次阅读 2018-03-15 17:04:48
    存储过程中一般需要书写过程运行日志,但是工作这么长时间自己从没认真研究过调用日志存储过程的问题。现因项目整合需要做日志监控,才发现日志的重要性:create or replace procedure bo_dw.sp_sys_log ( oi_...

       在写存储过程中一般需要书写过程运行日志,但是工作这么长时间自己从没认真研究过调用日志存储过程的问题。现因项目整合需要做日志监控,才发现日志的重要性:

    create or replace procedure bo_dw.sp_sys_log 
    (
        oi_task_id         in out integer ,
        iv_task_name       in     varchar2,
        iv_table_name      in     varchar2,
        iv_task_sign       in     varchar2,
        ii_task_status     in     integer ,
        iv_task_log        in     varchar2,
        iv_task_pos        in     varchar2,
        iv_task_step_stime in     varchar2,
        ii_rowcount        in     integer default null
    )
    /** HEAD
      * @name sp_sys_log
      * @caption 日志记录
      * @type 日志
      * @parameter oi_task_id     inout integer   任务ID,任务状态为1时做输出参数,任务状态为0和其它时做输入参?
      * @parameter iv_task_name   in    varchar2  任务名称
      * @parameter iv_table_name  in    varchar2  目标表名
      * @parameter iv_task_sign   in    varchar2  任务标志,任务的统计时间
      * @parameter ii_task_status in    integer   任务状态,0 程序运行完成,1 程序运行中,其它 出错代码
      * @parameter iv_task_log    in    varchar2  任务日志,正常时为程序运行中或程序运行完成,出错时为出错信息
      * @parameter iv_task_pos    in    varchar2  任务位置,程序中的出错位?
      * @parameter ii_rowcount    int   integer   数据量,可选参数, 缺省值为NULL
      * @description 日志记录
      * @target vgopsys#tb_sys_log 单条日志表
      */
    is
      PRAGMA AUTONOMOUS_TRANSACTION;
      vv_task_memo varchar2(2000) ;
    begin
        /**  --表结构
            create table bo_dw.tb_sys_log
            (
              task_id     number,             -- 任务ID
              task_name   varchar2(30),       -- 程序名称
              table_name  varchar2(30),       -- 目标表名
              task_sign   varchar2(20),       -- 任务标志
              start_time  date,               -- 程序开始时间
              end_time    date,               -- 程序结束时间或出错时?
              task_status number,             -- 任务状态 1开始 0完成 其他失败
              task_log    varchar2(200),      -- 任务日志:正常时为程序运行中或程序运行完成,出错时为出错信息
              task_pos    varchar2(50),       -- 任务位置
              task_remark varchar2(2000)      -- 任务备注:  任务位置:开始时间yyyymmdd :数据量 (分隔符chr(10))
            );
    
            序号
            -- Create sequence
            create sequence seq_sys_proc_log
            maxvalue 9999999999999999999999
            start with 1
            increment by 1;
          */
    
        /** @description 对不同的任务状态,进行不同的日志处理 */
    
        vv_task_memo :='起止时间:'||iv_task_step_stime||' - '||to_char(sysdate,'dd hh24:mi:ss')||'|'|| '位置:'||iv_task_pos||'|'||'sql记录数:'||ii_rowcount;
    
        if ii_task_status = 1 then
            select bo_dw.seq_sys_proc_log.nextval into oi_task_id from dual;
            insert into bo_dw.tb_sys_log
            (
                task_id,            -- 任务ID
                task_name,          -- 程序名称
                table_name,         -- 目标表名
                task_sign,          -- 任务标志
                start_time,         -- 程序开始时间
                end_time,           -- 程序结束时间或出错时间
                task_status,        -- 任务状态
                task_log,           -- 任务日志
                task_pos,           -- 任务位置
                task_memo
            )
            values
            (
                oi_task_id     ,
                iv_task_name   ,
                iv_table_name  ,
                iv_task_sign   ,
                sysdate        ,
                null           ,
                1              ,
                '程序运行中'    ,
                iv_task_pos    ,
                vv_task_memo
            );
        elsif ii_task_status = 2 then
            update bo_dw.tb_sys_log
               set task_pos = iv_task_pos,
                   task_memo= task_memo || chr(10) ||  vv_task_memo
             where task_id = oi_task_id;
        elsif ii_task_status = 0 then
            update bo_dw.tb_sys_log
               set end_time = sysdate,
                   task_status = 0,
                   task_log = '程序运行完成',
                   task_pos = iv_task_pos,
                   task_memo= task_memo || chr(10) ||  vv_task_memo
             where task_id = oi_task_id;
        else
            update bo_dw.tb_sys_log
               set end_time = sysdate,
                   task_status = ii_task_status,
                   task_log = substr(iv_task_log, 1, 200),
                   task_pos = iv_task_pos /*,
                   task_memo= task_memo || chr(10) ||  vv_task_memo*/
             where task_id = oi_task_id;
        end if;
        commit;
    end;
    

      这是一个例子,认真琢磨一下还是能明白的。这里在procedure定义中有个PRAGMA AUTONOMOUS_TRANSACTION,百度解释为 自治事务 对于定义成自治事务的Procedure,实际上相当于一段独立运行的程序段,这段程序不依赖于主程序,也不干涉主程序

    自治事务的特点:

    第一,这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。

    第二,在自治事务中,commit或者rollback只会提交或回滚当前自治事务中的DML,不会影响到Main程序中的DML。

    关于自治事务解释来源链接:点击打开链接


    展开全文
  •  存储过程(Stored Procedure)是大型数据库系统,一组为了完成特定功能的SQL 语句集,存储数据库,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有...

    一、 什么是存储过程:

      存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

     

    二、为什么要用存储过程呢? 

    存储过程真的那么重要吗,它到底有什么好处呢?

    笔者认为,存储过程说白了就是一堆 SQL 的合并。中间加了点逻辑控制。

    1.存储过程处理比较复杂的业务时比较实用。具体分为两个方面:(一)、响应时间上来说有优势:如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话,就只有一次。存储过程可以给我们带来运行效率提高的好处; (二)、从安全上使用了存储过程的系统更加稳定:程序容易出现 BUG 不稳定,而存储过程,只要数据库不出现问题,基本上是不会出现什么问题的。

    2.数据量小的,或者和钱没关系的项目不用存储过程也可以正常运作。

     

    三、那么什么时候才可以用存储?

    对于数据量不是很大以及业务处理不是很复杂的小项目就无需要了么?

    存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威力和优势主要体现在:  

    1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。  

    2.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。  

    3.存储过程可以重复使用,可减少数据库开发人员的工作量。  

    4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

    5.更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。

    6.布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。

    一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。经自已测试,一个有着十万条记录的表,通过php调用存储过程比通过PHP执行sql语句获取所有记录的时间,平均快0.4秒左右.

    存储过程概念

    存储过程是一些sql语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。

    它的参数可以被传递和返回,与应用程序中的函数过程类似,存储过程可以通过名字来调用,具有输入参数和输出参数。

    存储过程分类

    1) 返回记录集的存储过程              ----从数据库返回符合一个或几个条件的记录

    2) 返回数值的存储过程(标量存储过程)----在数据库执行一个有返回值的函数或命令

    3) 行为存储过程                      -----在数据库中的更新和删除操作

    为什么要是用存储过程?

    (1)执行速度快——存储过程只在创建时进行编译,以后每次执行存储过程都不需要重新编译,而一般SQL语句没执行一次就需编译一次,所以使用存储过程可提高数据库的执行速度。

    (2)减少网络通信量——当对数据库进行复杂操作时,(如对多个表进行insert、update、select、delete时)可将这些复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序完成就是多条SQL语句,可能要多次连接数据库,而换成存储过程只需一次连接。

    (3)更强的适应性与复用性——存储过程可以重复使用,提高了可重用性,减少数据库开发人员的工作量。

    (4)可维护性高——更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

    (5)安全性高,可设定只有某用户才能对指定存储过程的使用权,且存储过程比多条sql稳定,只要数据库不出现问题,基本上是不会出现什么问题的。

    (6)分布式工作——应用程序和数据库的编码工作可以单独进行,减少耦合度。

    (7)更好的版本控制,通过svn等源代码控制工具可以轻松恢复或引用旧版本的存储过程。

    存储过程的缺点

    (1)开发调试差:无良好的IDE开发工具,存储过程的调试比一般SQL要复杂的多。

    (2)可移植性差:由于存储过程将应用程序绑定到数据库上,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。

    (3)重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

    (4)如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

    展开全文
  • SQL存储过程在.NET数据库应用一.前言: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它...


    SQL存储过程在.NET数据库中的应用

    一.前言:

    存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。总的来说,存储过程具有以下一些优点:

    ◆存储过程允许标准组件式编程

    ◆存储过程能够实现较快的执行速度

    ◆存储过程能够减少网络流量

    ◆存储过程可被作为一种安全机制来充分利用

    本文作者将向大家介绍.NET数据库应用程序中存储过程的应用,以及如何将它与ADO.NET中的SqlDataAdapter对象、DataSet对象等结合使用以提高.NET数据库应用程序的总体性能。

    二.系统要求:

    开发工具:Visual Studio.NET

    数据库管理系统:SQL Server 2000(其中包含了示例程序所用到的Pubs数据库)

    三.创建一个简单的存储过程:

    这里我将向大家介绍如何运用Visual Studio.NET IDE来创建存储过程。运用Visual Studio.NET IDE创建存储过程是非常容易和直观的,你只要在服务器资源管理器中导向到Pubs数据库并展开节点,就会发现包括存储过程在内的各种数据库对象,如图1 所示。
     

    在存储过程节点上点击右键便可弹出一个菜单,其中包含了“新建存储过程”的命令。新建一个存储过程后,IDE中的代码编辑窗口便出现如下所示的代码模板:

     

    CREATE PROCEDURE dbo.StoredProcedure1
    /*
    (
    @parameter1 datatype = default value,
    @parameter2 datatype OUTPUT )
    */
    AS
    /* SET NOCOUNT ON */
    RETURN
     


    上面的代码模板符合简化的创建存储过程的语法规则,完整的语法规则如下:

    CREATE PROC [ EDURE ] procedure_name [ ; number ]
    [ { @parameter data_type }
    [ VARYING ] [ = default ] [ OUTPUT ]
    ] [ ,...n ]
    [ WITH
    { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
    [ FOR REPLICATION ]
    AS sql_statement [ ...n ]
     


    限于篇幅,各个参数的含义在此就不多作介绍了,有兴趣的读者可以参考有关SQL Server 2000数据库管理系统的资料。

    下面我对该代码模板中的各个语法成分略作介绍。CREATE PROCEDURE声明创建一个存储过程,后面跟着该存储过程的名称。“/*……*/”中的成分是该存储过程的参数,可包括输入参数和输出参数。AS关键 字后面的内容是该存储过程的主体部分,其中是任何数量和类型的包含在存储过程中的SQL语句。RETURN关键字表明存储过程结束并能返回整型状态值给调 用者。下面我们就来创建一个简单的不带参数的存储过程并运用之:

    CREATE PROCEDURE dbo.up_GetPublisherInfo
    AS
    SELECT pub_id, pub_name, city, state, country
    FROM publishers
    RETURN


     

     

    创建以上存储过程后,保存之。保存完毕,与该存储过程相对应的节点就会出现在服务器资源管理器中。同时请注意代码编辑窗口中的CREATE关键字变 为ALTER关键字了,该关键字是用于更改任何现有的存储过程的。要运行上述存储过程,只要点击其节点并在右键弹出菜单中选择“运行存储过程”,运行的结 果图示如下:

     

    四.创建一个带参数的存储过程:

    以上我们创建了一个简单的不带参数的存储过程,而在实际的应用中往往会用到很多带有参数的存储过程。带有参数的存储过程一般是用于更新数据或是插入数据的。下面我们可以运用同样的操作方法创建一个带参数的存储过程:

     

    CREATE PROCEDURE dbo.up_UpdatePublisherInfo
    (
    @pub_id char (4),
    @pub_name varchar (40),
    @city varchar (20),
    @state char (2),
    @country varchar (30)
    )
    AS
    UPDATE publishers
    SET pub_name = @pub_name, city = @city, state = @state,
     country = @country
    WHERE ( pub_id = @pub_id )
    RETURN
     

     

    在上面的创建存储过程的代码中,我们通过在名称前添加一个“@”标志来声明存储过程的局部变量-参数,同时还声明了各个参数的类型,确定了各个参数 的方向值,也即表明该参数是输入型的还是输出型的或者是输入输出型的或者是返回值型的。用户通过相应的存储过程名称以及正确有效的参数便可调用该存储过程 了。还有,你可以通过运用OUTPUT关键字在参数中添加输出型的参数,具体方法请参考上面的语法规则。输出型的参数能返回给调用者相关的信息。

    上面的存储过程能更新publishers表中相应出版商的信息。你可以通过点击该存储过程的节点,在右键弹出菜单中选择“运行存储过程”来执行 它。一旦执行,IDE中便弹出一个输入出版商信息的对话框(如图3所示)。在该对话框中填入正确有效的更新信息,注意pub_id的值在原来的表中必须存 在,然后点击“确定”按钮便可更新数据了。

    五.创建简单存储过程的数据库应用程序:

    下面我们就运用上述的不带参数的存储过程来一个数据库应用程序,其中还用到了ADO.NET中的SqlDataAdapter对象以及 DataSet对象。其中的SqlDataAdapter对象作为SQL Server数据库和DataSet对象的桥梁将两者联系在一起。SqlDataAdapter对象包含了两个常用的方法:Fill()方法和 Update()方法。其中的Fill()方法能从数据库中获取相应数据并填充到DataSet对象中,而Update()方法顾名思义就是更新数据集的 意思了。在调用Fill()方法以前,我们必须设置好SqlDataAdapter对象的SelectCommand属性,该属性其实是一个 SqlCommand对象。SelectCommand属性中包含有效的SQL语句,并能据此从数据库中获取相应数据并填充到DataSet对象中。

    首先,我们创建一个Windows Forms应用程序,编程语言为C#。在Visual Studio.NET中创建一个新的项目后,给该项目添加一个新的类-Publishers类,该类封装了连接到后台数据库并获取数据集对象的业务逻辑。步骤如下:

    1.添加必要的命名空间引用:using System.Data.SqlClient;

    2.给该类添加如下一些必要的变量:

    private SqlConnection cnPubs;
    private SqlCommand cmdPubs;
    private SqlDataAdapter daPubs;
    private DataSet dsPubs;
     


    3.在该类的构造函数中完成连接后台数据库,获取SqlDataAdapter对象等业务逻辑:

    public Publishers()
    {
    try
    {
    // 创建一个数据库连接对象
    cnPubs = new SqlConnection( "server=localhost;integrated security=true;database=pubs" );
    // 创建一个SqlCommand对象,并指明其命令类型为存储过程
    cmdPubs = new SqlCommand();
    cmdPubs.Connection = cnPubs;
    cmdPubs.CommandType = CommandType.StoredProcedure;
    cmdPubs.CommandText = "up_GetPublisherInfo";
    // 创建一个SqlDataAdapter对象,设定其SelectCommand属性为上面的SqlCommand对象
    daPubs = new SqlDataAdapter();
    daPubs.SelectCommand = cmdPubs;
    // 创建一个DataSet对象
    dsPubs = new DataSet();
    }
    catch( Exception ) {}
    }
     

    4.最后为该类提供一个GetPublisherInfo()方法,该方法用SqlDataAdapter对象填充DataSet对象并返回填充后 的DataSet对象,方法如下(值得注意的是:SqlDataAdapter对象会隐式地打开数据库连接并在获取数据后隐式地关闭连接,这就是说 DataSet对象是工作在非连接模式下的。而当你显式地打开数据库连接并获取数据后,SqlDataAdapter对象并不会将该连接关闭):

    public DataSet GetPublisherInfo()
    {
    // 调用SqlDataAdapter对象的Fill()方法并返回数据集对象
    daPubs.Fill( dsPubs );
    return dsPubs;
    }
     

    完成Publishers类的设计后,我们给主窗体添加一个DataGrid控件并用它来显示DataSet对象中的数据。首先给主窗体类添加如下成员变量:

    private Publishers pubs;
    private DataSet ds;
    之后,修改主窗体类的构造函数如下:
    public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent();
    //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    // pubs = new Publishers();
    ds = pubs.GetPublisherInfo();
    dataGrid1.DataSource = ds.Tables[0];
    }
     

    这样该应用程序一启动主窗体的DataGrid控件中便显示了运用上述不带参数的存储过程从Pubs数据库中获取的相应数据,程序运行图示如下:

    六.创建带参数的存储过程的数据库应用程序:

    上面我们创建了一个不带参数的存储过程的应用程序,下面我们就来创建一个更加复杂的数据库应用程序。在实际的数据库应用中,我们往往需要获取数据并 更新、插入或删除数据,这时我们就需要用到带有参数的存储过程了,同时在运用SqlDataAdapter对象时,我们会调用它的Update()方法。 该Update()方法会自动根据DataSet对象中的DataTable对象内各条记录的变化情况完成相应操作。SqlDataAdapter对象还 包含了UpdateCommand、InsertCommand、DeleteCommand等属性,这些属性其实都是SqlCommand对象。 Update()方法会根据操作的类型选用相应的属性。

    在运用带有参数的存储过程建立数据库应用程序时,我们一般都要用到SqlParameter类,该类封装了各种与Sql参数相关的属性和方法。其中 的属性包括了ParameterName,SqlDBType,Direction,Size,Value,SourceColumn以及 SourceVersion等。其中ParameterName,SqlDBType,Direction,Size等属性是用于匹配存储过程中定义的参 数的。比如下面定义的SqlParameter对象就是用来匹配前面定义的up_UpdatePublisherInfo存储过程中的“@pub_id”参数的。

    SqlParameter updParam = new SqlParameter( "@pub_id", SqlDbType.Char, 4 );

    在上面的定义中,虽然Direction属性没有明确地给出,但是它的默认值为Input,所以也就满足了我们的需要。而如果一个 SqlParameter对象的Direction属性为InputOutput或Output或ReturnValue,那么其Direction属性 就必须明确地说明了,比如下面的代码就明确地声明了一个SqlParameter对象的Direction属性为Output。

    oParam.Direction = ParameterDirection.Output;

    其中的SourceColumn属性是用于匹配一个DataTable对象中的DataColumn对象的,这种匹配能在调用Update()方法 更新DataTable对象时隐式地导入所需的SqlParameter对象。如果在定义时没有声明该属性,那么你必须在代码中显式地说明 SqlParameter对象的SourceColumn属性。

    其中的SourceVersion属性的默认值是DataRow对象相应字段中的当前值,也就是要更新到数据库中的值。当然, SourceVersion属性也可以指向DataRow对象相应字段中的原始值,也即从数据库中获取的初始值。在数据库事务处理系统中,数据的同步性问 题非常重要,下面我们来建立一个能检测数据同步性的存储过程。

     

    CREATE PROCEDURE dbo.up_UpdatePublisherName
    (
    @pub_id char(4),
    @pub_name varchar(40),
    @Original_pub_name varchar(40)
    )
    AS
    if exists(select pub_id
     from publishers
    where (pub_id = @pub_id) AND (pub_name = @Original_pub_name))
    Begin
     UPDATE publishers SET pub_name = @pub_name
     WHERE (pub_id = @pub_id)
    End
    RETURN
     


    接着,我们在上面的应用程序中调用该存储过程以更新发行商的名称。首先,在原有应用程序的基础上完善其业务逻辑类-Publishers类:

    1.添加一个新的SqlCommand对象,该对象能作为SqlDataAdapter对象的 UpdateCommand属性被使用:
    private SqlCommand cmdUpdPubs;
    2.更新该类的构造函数Publishers()函数,添加以下内容:
    // 创建另一个SqlCommand对象,该对象引用更新发行商名称的存储过程
    cmdUpdPubs = new SqlCommand();
    cmdUpdPubs.Connection = cnPubs;
    cmdUpdPubs.CommandType = CommandType.StoredProcedure;
    cmdUpdPubs.CommandText = "up_UpdatePublisherName";
    // 为上面的SqlCommand对象添加必要的参数
    cmdUpdPubs.Parameters.Add( "@pub_id", SqlDbType.Char, 4, "pub_id" );
    cmdUpdPubs.Parameters.Add( "@pub_name", SqlDbType.VarChar, 40, "pub_name" );
    SqlParameter updParam = new SqlParameter
    ( "@Original_pub_name", SqlDbType.VarChar, 40, "pub_name" );
    updParam.SourceVersion = DataRowVersion.Original;
    cmdUpdPubs.Parameters.Add( updParam );
    3.指定SqlDataAdapter对象的UpdateCommand属性为上面定义的SqlCommand对象:
    daPubs.UpdateCommand = cmdUpdPubs;
    4.添加方法UpdatePublisherName():
    public void UpdatePublisherName( DataSet dsChanges )
    {
    // 更新所有改动
    daPubs.Update( dsChanges );
    }
     


    应用程序的业务逻辑类完善之后,在主窗体上添加一个名为“更新数据集”的按钮,并添加该按钮的事件响应函数如下:

    private void button1_Click(object sender, System.EventArgs e) { if( ds.HasChanges() ) { pubs.UpdatePublisherName( ds.GetChanges() ); ds.Clear(); ds = pubs.GetPublisherInfo(); } } 


    到此为止,应用程序的业务逻辑类和主窗体类都已经更新完毕,现在的应用程序能根据用户的改用更新数据库中的相关内容了。


    七.总结:

    本文向大家介绍了存储过程的基本知识以及在.NET数据库应用程序中如何结合SqlDataAdapter对象、DataSet对象等构建数据驱动 的应用程序。在本文中,我们运用到了两类存储过程:一类为简单的不带参数的存储过程,其运用方法相对容易;另一类为带有参数的存储过程,在调用该类存储过 程时还得运用到SqlParameter对象。同时,我们不难发现将数据更新业务逻辑封装在存储过程中是一种很好的设计方法,它能提高应用程序的可管理 性、可扩展性以及数据库的安全性。类似的,插入数据以及删除数据的业务逻辑也可以封装在存储过程中并以相似的方法在应用程序中被运用。最后,希望本文对大 家有不少帮助。

    展开全文
  • 存储过程是数据库的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。总的来说,存储过程具有以下一些优点: ◆存储过程允许标准组件式编程 ◆存储过程能够实现较快的执行速度 ◆存储
  • 存储过程在Java的使用

    千次阅读 2017-08-06 22:54:54
    存储过程的创建参考 存储过程的演示 关键代码如下:import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException;import oracle.jdbc.OracleTypes; import util.JDBCUtil;public...
  • http://www.gotoread.com/mag/7939/contribution128091.html内容摘要 本文介绍了Oracle 存储过程以及触发器的概念等基础知识,结合实际项目的实践,总结了触发器和存储过程在Oracle数据库间数据同步应用的...
  • 做为SQL存储过程和.NET的新手,下面的指导还是很有用的,自己这一段刚刚接触这些东西,搜集了一些相关的东西,能使新手较容易上手,当然啦, 要精通和熟练应用,还是要看更多更深的资料的,高手请不要见笑。...
  • 存储过程说起
  • 存储过程的创建 假设存在一张表:Follow(关注表),其表结构如下: 其中id需要是自增。 假设我们需要实现的存储过程是能根据userId1和userId2的值选择出一条记录。 博主使用的是Navicat,因此创建存储...
  • SSM 系统,如何调用存储过程

    千次阅读 2018-05-04 11:30:29
    SSM 框架调用存储过程
  • 存储过程

    千次阅读 2021-03-03 10:40:08
    存储过程简介 什么是存储过程存储过程可以说是一个记录集吧,它是由一些T...2.一个存储过程在程序网络交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 3.通过存储过程能够使没有权限的
  • 最近有些项目在数据库oracle使用到json格式的数据交互,对于oracle12以上的版本...下面就比较详细的说一下,关于oracle数据库在存储过程中的JSON解析应用: 一:先上一段存储过程解析JSON的存储过程,看你们能不...
  • 存储过程是一组预先创建并用指定的名称存储数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要数据库提供相同的服务时,只需再次执行该存储过程。...
  • MySQL中存储过程使用详解

    千次阅读 2017-05-16 20:06:13
    【1】存储过程简介存储过程中的控制语句 【http://blog.csdn.net/J080624/article/details/72353508】不同类型参数存储过程示例 【http://blog.csdn.net/j080624/article/details/55096307】MyBatis调用存储过程 ...
  • 存储过程是数据库的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。总的来说,存储过程具有以下一些优点: ◆存储过程允许标准组件式编程。 ◆存储过程能够实现较快的执行速度。
  • 数据库存储过程

    万次阅读 2017-01-04 09:24:51
    存储过程的概念】   存储过程(Stored Procedure)是一组为了完成...存储过程是由 流控制 和 SQL语句书写的过程,这个过程经编译和优化后存储数据库服务器存储过程 可由应用程序通过一个调用来
  • 存储过程浅述

    2017-10-05 11:12:01
    为什么要用存储过程 几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没有用到存储,不...
  • 存储过程 asp存储过程

    2008-04-10 12:13:00
    SQL SERVER数据库开发之存储过程应用标 题:SQL SERVER数据库开发之存储过程应用作 者:栽培者日 期:2005-12-27说 明:由于个人能力有限,文章难免会出现错误或遗漏的地方,敬请谅解!同时欢迎你指出,以便...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 462,442
精华内容 184,976
关键字:

存储过程在项目中的应用