• ADOQUERY,CLIENTDATASET,ADOSTOREPROC执行存储过程【多种方法】


    本文用实例的方式演示了如何分别使用ADOQUERY,CLIENTDATASET,ADOSTOREPROC执行MS-SQL Server中存储过程,既可以返回记录集(表)数据,又可以返回参数信息,供读者参考。

    MS-SQL Server中的存储过程:

    CREATE PROCEDURE [dbo].[up_TestAdoExec] 
        @inVar varchar(100), 
        @outVar varchar(100) output
    AS
    BEGIN
        select * from 操作日志表
        set @outVar='传入的参数值为:'+@inVar
    END

    AdoQuery调用方法:

    procedure TMain.btn_AdoqueryExecClick(Sender: TObject);
    begin
      DataSource1.DataSet := ADOQuery1;
    
      ADOQuery1.Close;
      ADOQuery1.SQL.Text := 'Execute up_TestAdoExec :@inVar,:@outVar output';
      ADOQuery1.Parameters.Clear; //调用存储过程时,必须把此语句放在对SQL.Text的赋值操作之后,否则会发生如果多次执行存储过程时则会出错的结果
      ADOQuery1.Parameters.CreateParameter('@inVar',ftString,pdInput,100,'');
      ADOQuery1.Parameters.CreateParameter('@outVar',ftString,pdOutput,100,'');
      ADOQuery1.Parameters.ParamByName('@inVar').Value := Edit1.Text;
      //ADOQuery1.Parameters.ParamByName('@outVar').Value := Edit2.Text; //单向输出参数,赋值没有意义。
      ADOQuery1.Open;
      Edit2.Text := ADOQuery1.Parameters.ParamByName('@outVar').Value;
    end;

    ClientDataSet调用方法(实际上就是三层中的远端执行):

    procedure TMain.btn_ClientDataSetExecClick(Sender: TObject);
    begin
      DataSource1.DataSet := ClientDataSet1;
    
      ClientDataSet1.ProviderName := 'DataSetProvider1';
      DataSetProvider1.DataSet.Close; //即执行了 Adoquery1.Close;
      ClientDataSet1.Close;
      ClientDataSet1.CommandText := 'Execute up_TestAdoExec :@inVar,:@outVar output';
      ClientDataSet1.Params.Clear; //调用存储过程时,必须把此语句放在对CommandText的赋值操作之后
      ClientDataSet1.Params.CreateParam(ftString,'@inVar',ptInput);
      ClientDataSet1.Params.CreateParam(ftString,'@outVar',ptOutput);
      ClientDataSet1.Params.ParamByName('@inVar').Size := 100;
      ClientDataSet1.Params.ParamByName('@inVar').Value := Edit1.Text;
      ClientDataSet1.Params.ParamByName('@outVar').Size := 100;
      //ClientDataSet1.Params.ParamByName('@outVar').Value := Edit2.Text;
      //ClientDataSet1.Execute;//如果不返回结果集,执行此语句
      ClientDataSet1.Open;
      Edit2.Text := ClientDataSet1.Params.ParamByName('@outVar').Value;
    end;

    AdoDataSetStoreProc调用方法:

    procedure TMain.btn_AdoStoreProcExecClick(Sender: TObject);
    begin
      DataSource1.DataSet := ADOStoredProc1;
      ADOStoredProc1.Close;
      ADOStoredProc1.ProcedureName := 'up_TestAdoExec';
      ADOStoredProc1.Parameters.Clear;
      ADOStoredProc1.Parameters.CreateParameter('@inVar',ftString,pdInput,100,'');
      ADOStoredProc1.Parameters.CreateParameter('@outVar',ftString,pdOutput,100,'');
      ADOStoredProc1.Parameters.ParamByName('@inVar').Value := Edit1.Text;
      //ADOStoredProc1.Parameters.ParamByName('@outVar').Value := Edit2.Text;
      ADOStoredProc1.Open;
      Edit2.Text := ADOStoredProc1.Parameters.ParamByName('@outVar').Value;
    end;

    演示程序:


    谢祥选【小宇飞刀(xieyunc)】
  • 相关阅读:
    Linux关闭防火墙命令
    js改变数组的两个元素的位子,互换、置顶
    vue nexttick的理解和使用场景
    vue mint-ui 框架下拉刷新上拉加载组件的使用
    vue项目中使用了vw适配方案,引入第三方ui框架mint-ui时,适配问题解决
    小程序开发笔记【二】,抽奖结果json数据拼装bug解决
    gulp插件gulp-nunjucks-render的使用及gulp4的简单了解
    小程序开发笔记【一】,查询用户参与活动列表 left join on的用法
    mysql数据插入前判断是否存在
    微信公众号通过图片选取接口上传到阿里oss
  • 原文地址:https://www.cnblogs.com/xieyunc/p/4438282.html
Copyright © 2020-2023  润新知