精华内容
下载资源
问答
  • ADO教程(执行带参数存储过程

    千次阅读 2017-05-25 16:07:42
    首先不得说ADO的使用率不是很高 1.ADO是微软提供的访问各种数据库的统一接口,是对底层的COM技术OLE DB的封装;它的主要优点是易于使用,高速度,低内存开销,和一个小磁盘占用,缺点:开发效率相对高; ADO 是...

    由于最近项目上要使用ADO访问数据库,而网上又没有非常完整的帖子,干脆摸着石头过河来总结一个ADO的使用;首先不得不说ADO的使用率并不是很高

    1.ADO是微软提供的访问各种数据库的统一接口,是对底层的COM技术OLE DB的封装;它的主要优点是易于使用,高速度,低内存开销,和一个小磁盘占用,缺点:开发效率相对不高;


    2.既然ADO是一个面向对象的COM,就涉及到一个ADO的对象;

    对象图表如下:


    对象有:

    Connection:用于建立数据源连接;该对象是安全的;

    Command:定义一个你打算对数据源执行的特定命令;该对象是不安全的;

    Recordset:执行命令生成的结果集或者一个表的记录集;注:纪录集对象始终只有一个记录(当前记录);该对象是安全的;

    Parameter:基于参数的名称或者存储过程,主要是存储过程经常用到;

    剩下的不常有的对象就不一一介绍了,如果后面有用到,再描述;


    3.ADO的重要属性:(全部太多,介绍常用的);

    ActiveCommand 指示创建关联的记录集对象的命令对象。
    ActiveConnection 指示指定的命令、记录集或记录对象当前所属的连接对象。
    bof  : 表明当前记录位置在第一条记录前一个记录集对象。
    eof :  表明当前记录位置后的最后一个记录一个记录集对象。
    CommandText :执行命令语句。
    CommandTimeout :表示在执行命令之前要等待多长时间才能终止尝试并生成错误。
    CommandType :表示命令对象的类型。
    ConnectionTimeout :表示在建立连接之前要等待多长时间才能终止尝试并生成错误。

    4.ADO函数:(敲黑板了,重点!!!)
    ADO的全部函数并不多,但是我还是不想全部介绍,太懒了,哈哈,有疑问的欢迎留言;

    addnew :为一个可更新的记录集对象创建一个新的记录。

    例如:recordset.AddNew FieldList, Values; 
      recordset.update;

    Append :附加一个对象集合
    BeginTrans:开始一个事务;
    commitTrans:提交一个事务;
    RollbackTrans:回滚一个事务;

    例如:
    object.BeginTrans  
    object.CommitTrans 
    object.RollbackTrans

    cancel :取消执行等待异步方法调用。
    例如:
    object.Cancel 

    CreateParameter 创建具有指定属性的新参数对象。(一般会和Append同时出现)

    Delete (ADO Parameters Collection):从参数集合中删除一个对象。
    Delete (ADO Fields Collection):从字段集合中删除一个对象。
    Delete (ADO Recordset):删除结果集;

    Excute (ADO Command):执行 CommandText 属性中指定的查询、sql 语句或存储过程。
    Excute (ADO Connection)执行指定的查询、sql 语句、存储过程或提供程序特定的文本。

    Excute返回一个结果集或者NULL;
    Set recordset = command.Execute( RecordsAffected, Parameters, Options ) ;

    Getrows 将记录集对象的多个记录检索到数组中。

    array = recordset.GetRows(Rows, Start, Fields )

    GetString 以字符串形式返回记录集。

    Variant = recordset.GetString(StringFormat, NumRows, ColumnDelimiter, RowDelimiter, NullExpr)


    MoveFirst、movelast、movenextMovePrevious:移动到指定 recordset 对象中的第一个、最后一个、下一个或上一个记录, 并将其记录为当前记录。

    Open (ADO Connection) :将打开与数据源的连接。
    Open (ADO Record) :将打开现有的记录对象, 或创建新的文件或目录。
    Open (ADO Recordset) :将打开一个游标。

    5.讲了这么多,来一个实例吧;网上将执行SQL语句的很多也很简单,我来一个执行带参数存储过程的;

    项目开头:必不可少的;msado15.dll的路径根据自己的情况设置,
    #import "C:/Program Files (x86)/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF")

    _ConnectionPtr m_pConn; //连接
    _RecordsetPtr m_pRecordset;//结果集
    _CommandPtr m_pCommand;//命令


    初始化:
    CoInitializeEx(NULL, COINIT_MULTITHREADED);//初始化COM环境

    m_pRecordset.CreateInstance("ADODB.Recordset"); //指针敲出.是不是很神奇,不应该是->吗?
    m_pConn.CreateInstance("ADODB.Connect");
    m_pCommand.CreateInstance("ADODB.Command");

    //或者直接这样子:_ConnectionPtr pConn(__uuidof(Connection));初始化也可以;

    char sql[] = { "Provider=MSDASQL.1;Persist Security Info=False;User ID=MentoAOI;Data Source=Mento;Initial Catalog=aoi" };   //连接字符串;



    HRESULT hr;     //连接返回值

    try
    {
    m_pConn->Open(sql, "", "", adConnectUnspecified);

    //也可以:m_pConn->ConnectionString = sql;  m_pConn->Open("", "", "", adConnectUnspecified);

    }
    catch (_com_error &e)
    {
    do
    //CString temp = e.Description();
    //CString teptemp = e.ErrorMessage();
    //ShowDBError(sql, temp, teptemp);
    }

    if (!SUCCEEDED(hr))
    {
    CLComLog::GetLogInstance()->sprintfLog(__LINE__, __FILE__, "连接到数据库失败");
    return;
    }

    接下来:先调一个没有参数的存储过程,再将其执行结果作为参数传到另外一个存储过程去执行;

    int GetId(std::string& strIDOut)    //返回值表示是否有ID,参数表示具体是多少;
    {
    char sql[1024] = { 0 };
    int iSum = 0;
    try
    {
    sprintf_s(sql, "GetID");
    m_pCommand->Cancel();
    ParamRefresh(m_pCommand);
    m_pCommand->ActiveConnection = m_pConn;//设置链接
    m_pCommand->CommandText = sql;//设置命令
    m_pCommand->CommandType = adCmdStoredProc;//声明是存储过程
    m_pRecordset = m_pCommand->Execute(NULL, NULL, NULL);  //执行
    m_bUseCommand = true;
    m_pRecordset->MoveFirst();//移动到第一行
    int iIndex = 0;

    char cValue[1024] = { 0 };
    _variant_t temp;
    if (!m_pRecordset->adoEOF)
    {
    iIndex = 0;
    iSum = 0;
    temp = m_pRecordset->GetCollect(_variant_t((long)iIndex));
    if (temp.vt != VT_NULL)
    {
    (iSum) = temp.intVal;
    }iIndex++;
     
    temp = m_pRecordset->GetCollect(_variant_t((long)iIndex))
    if (temp.vt != VT_NULL)
    {
    strcpy_s(cValue, 20, (char*)(_bstr_t)temp.bstrVal); 
    }
    iIndex++;
    strIDOut =cValue;
    }
    m_pRecordset->Close();
    }
    catch (_com_error &e)
    {
    do;
    }
    return iSum;
    }

    执行带参数的存储过程;
    void GetShopFloorInfo(std::string strID)
    {
    char sql[1024] = { 0 };
    int iSum = 0;
    try
    {
    sprintf_s(sql, "GetIdInfo");  //存储过程名字;
    m_pCommand->Cancel();
    ParamRefresh(m_pCommand);
    m_pCommand->ActiveConnection = m_pConn; 
    m_pCommand->CommandText = sql;
    m_pCommand->CommandType = adCmdStoredProc;
    auto pParam = m_pCommand->CreateParameter(_bstr_t("iID"), adVarChar, adParamInput, 20, strID.c_str());  //这几个参数了解存储过程的肯定了解这个吧;
    m_pCommand->Parameters->Append(pParam);   //加入参数;
    CLComLog::GetLogInstance()->sprintfLog(__LINE__, __FILE__, "生成结果集");
    m_pRecordset = m_pCommand->Execute(NULL, NULL, NULL);
    CLComLog::GetLogInstance()->sprintfLog(__LINE__, __FILE__, "成功生成结果集");
    m_bUseCommand = true;
    m_pRecordset->MoveFirst();
    ...
    ..
    .
    (下面就和没有参数存储过程一样了);
    }

    最后最后:用完记得释放;

    if (m_pRecordset)
    m_pRecordset->Close();     //关闭记录集   
    if (m_pConn)
    m_pConn->Close();//关闭数据库
    if (m_pCommand)
    m_pCommand->Cancel();
    if (m_pRecordset)
    m_pRecordset.Release();//释放记录集对象指针                 
    if (m_pConn)
    m_pConn.Release();//释放连接对象指针
    CoUninitialize(); //释放COM环境

    后面的内容以后再讨论吧!!!

    展开全文
  • 创建 use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery4') drop procedure usp_Score...create procedure usp_ScoreQuery4 --创建带参数存储过程 @AbsentCount int...

    创建

    use StudentManager
    go
    if exists(select * from sysobjects where name='usp_ScoreQuery4')
    drop procedure usp_ScoreQuery4
    go
    create procedure usp_ScoreQuery4 --创建带参数的存储过程
    @AbsentCount int output,--缺考总人数
    @FailedCount int output,--不及格总人数
    @CSharp int=60,
    @DB int=60
    as
        select Students.StudentId,StudentName,C#=CSharp,DB=SQLServerDB
                     from Students
                     inner join ScoreList on Students.StudentId=ScoreList.StudentId
                     where CSharp<@CSharp or SQLServerDB<@DB        --显示结果列表 
        select @AbsentCount=count(*) from Students 
                    where StudentId not in(select StudentId from ScoreList) --查询缺考总人数
        select @FailedCount=count(*) from ScoreList
                     where CSharp<@CSharp or SQLServerDB<@DB      --查询不及格总人数
    go

    执行

    1 use StudentManager
    2 go
    3 --调用带参数的存储过程
    4 declare @AbsentCount int,@FailedCount int --首先定义输出参数
    5 exec usp_ScoreQuery4 @AbsentCount output,@FailedCount output
    6 --使用反馈的结果
    7 select 缺考总数=@AbsentCount,不及格总数=@FailedCount

     

    转载于:https://www.cnblogs.com/Spinoza/p/10400358.html

    展开全文
  • 创建带输入参数存储过程

    千次阅读 2019-05-28 22:59:00
    创建带输入参数存储过程 语法 create proc[edure] 存储过程名  @参数1 数据类型=默认值,  ……  @参数n 数据类型=默认值 as  sql语句 go --必须要加批处理的go 例子: 1 --创建带输入参数的...

    创建带输入参数的存储过程

    语法

    create proc[edure] 存储过程名

      @参数1 数据类型=默认值,

      ……

      @参数n 数据类型=默认值

     

    as

      sql语句

    go     --必须要加批处理的go

    例子:

     1 --创建带输入参数的存储过程
     2 /*
     3     题目:查询指定的用户在指定的时间段内的下单信息,
     4     如果结束日期没有指的话,那么查询的是到今天为止的下单信息
     5 */
     6 use E_Market
     7 go 
     8 if exists (select * from sysobjects where name='usp_GetOrderInfo')
     9 drop proc usp_GetOrderInfo
    10 go
    11 create proc usp_GetOrderInfo
    12     @startDate datetime,   --开始时间
    13     @endDate datetime=null,   --结束时间
    14     @userId varchar(20)=null  --指定的用户
    15 as
    16     if @endDate is null    --判断结束日期是否为空
    17         begin
    18             set @endDate=GETDATE()   --赋值当前日期
    19         end
    20 
    21     if @userId is null  --查询指定时间段内的所有订单信息
    22         begin
    23             select O.UserId as 用户号, PayWay as 付款方式, O.Amount as 购买数量,C.CommodityName as 商品名称,
    24                 S.SortName as 类别名称, O.OrderTime as 下单时间 from OrderInfo as O 
    25                  inner join CommodityInfo as C on O.CommodityId=C.CommodityId
    26                  inner join CommoditySort as S on C.SortId=S.SortId
    27                     where  O.OrderTime between @startDate and @endDate
    28         end
    29 
    30     else  --查询指定用户指定时间段内的所有订单信息
    31         begin 
    32             select O.UserId as 用户号, PayWay as 付款方式, O.Amount as 购买数量,C.CommodityName as 商品名称,
    33             S.SortName as 类别名称, O.OrderTime as 下单时间 from OrderInfo as O 
    34              inner join CommodityInfo as C on O.CommodityId=C.CommodityId
    35              inner join CommoditySort as S on C.SortId=S.SortId
    36              where O.UserId=@userId and O.OrderTime between @startDate and @endDate
    37         end
    38 go
    39 
    40 --如何使用带参数的存储过程
    41 --1)结束日期与用户都使用默认值
    42 --只指定了开始时间,查询的是从开始时间到今天的所有订单信息
    43 exec usp_GetOrderInfo '2014-11-1'
    44 
    45 --2)结束日期不为空,从开始时间到结束时间的所有订单信息
    46 --隐式调用,参数的顺序必须与创建存储过程的参数顺序完全相同
    47 exec usp_GetOrderInfo '2014-11-1', '2014-11-12','xiangxiang'
    48 
    49 --3)显示调用
    50 --显示调用对参数顺序无要求,如果参数中一个写"@名称=值"的形式,之后的参数都必须写成"@名称=值"的形式,默认值可以使用default代替
    51 exec usp_GetOrderInfo @UserId='xiangxiang',@startDate='2014-11-1',@endDate=default
    52 
    53 
    54 --4)可以通过声明变量来调用
    55 declare @d1 datetime,@d2 datetime, @uid varchar(20)
    56 set @d1='2014-11-1'
    57 set @d2='2014-12-1'
    58 set @uid='xiangxiang'
    59 exec usp_GetOrderInfo @d1,@d2,@uid
    60 --除了显示调用外,要求参数位置必须与存储过程定义时顺序相同

     

    转载于:https://www.cnblogs.com/zhangxudong-cnblogs/p/10940966.html

    展开全文
  • 如何创建带参数存储过程

    万次阅读 2013-05-07 08:27:24
    一、 创建带参数存储过程  创建带参数存储过程首先要在存储过程中声明该参数,每个存储过程参数都必须用唯一的名称进行定义。与T-SQL变量相同,参数名必须以@为前缀,并且遵从标识符规则。当用户提供该参数...

      一、 创建带参数的存储过程

          创建带参数的存储过程首先要在存储过程中声明该参数,每个存储过程参数都必须用唯一的名称进行定义。与T-SQL变量相同,参数名必须以@为前缀,并且遵从标识符规则。当用户不提供该参数的值时可以使用一个默认值来代替。

        1.不带默认值的参数

         创建一个参数不带默认值的存储过程,在调用该存储过程时,必须对存储过程中的所有参数进行赋值,如果有一个参数没有赋值,则无法调用该存储过程。例如:

         

    use db_student
    --创建存储过程
    create procedure proc_group
    @课程类别 varchar(20),  --定义参数
    @学分 int 
    as 
    select * from course
    where 课程类别=@课程类别 and 学分>@学分
    执行不带参数的存储过程就是:

    use db_student
    exec proc_group '歌曲',8
    如果不按顺序赋值可以写成:

    use db_student
    exec proc_group @学分=8,@课程类别=‘篮球课’
    2.带默认值的参数

      在SQL中我们可以对字段进行默认值的约束,在存储过程中也可以建立使用默认值的参数。只要在参数的定义之后加上等号,并在等号后面写出默认值即可。

    --创建存储过程
    use db_student
    create procedure proc_group
    @课程类别 varchar(20)='体育课',
    @学分 int=6
    as 
    select * from course where 课程类别=@课程类别 and 学分>@学分
    执行参数带默认值的存储过程

    use db_student
    exec proc_group @学分=8

    3.带返回参数的存储过程

    创建存储过程时,可以用output参数来创建一个带返回值的存储过程,例如:
     

    @a int output
    如果创建带返回参数的存储过程proc_group,那么SQL语句如下:

    --创建带返回值的存储过程
    create procedure proc_group
    @课程类别 carchar(20),
    @平均学分 int output         --设置带返回值的参数
    as 
    select @平均学分=avg(学分) from course where 课程类别=@课程类别
    





    展开全文
  • 1.不带参数存储过程 create or replace procedure mypro1 is begin insert into tb_test(myname) values('测试存储过程'); commit; end; / 调用的语句  call myp
  • c#执行sqlserver返回参数存储过程

    千次阅读 2017-08-23 14:13:02
    c#执行sqlserver返回参数存储过程
  • 存储过程 概念:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在...缺点:维护性较差,相对于简单sql,存储过程并没有什么优势,并且在进行调试时比较困难创建一个表Books ...
  • SQLserver创建参数存储过程

    千次阅读 2019-01-16 21:54:49
    SQLserver创建参数存储过程 ql数据库的存储过程是一种在你关闭数据库时,储存你代码的一种方法,并且能实现以简短的指令来修改你的数据。, 那么就让我们看看这简短明了的参数存储过程。 一.打开SQL数据库,找到...
  • 创建执行存储过程

    千次阅读 2017-11-03 14:00:17
    创建存储过程 CREATE PROCEDURE procedure_name [WITH ENCRYPTION] [WITH RECOMRILE] AS sql_statement 注: WITH ENCRYPTION: 对存储过程进行加密 WITH RECOMPILE: 对存储过程重新编译   在book数据库中...
  • Oracle定时任务执行存储过程带参数

    千次阅读 2018-06-14 15:58:24
    存储过程: create or replace procedure pro_test (retCode out number, retMsg out varchar2) is  vcrm v_prod_inst%ROWTYPE; TYPE ref_cursor_type IS REF CURSOR;  use_cursor ref_cursor_type; vunit ...
  • MySQL有关带参数存储过程

    千次阅读 2018-02-23 17:49:09
    前言小案例: 输入输出参数:记录MYSQL存储过程中的关键语法:DELIMITER // 声明语句结束符,用于区分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 BEGIN …. END 存储过程开始和结束符号 ...
  • 带参数存储过程动态创建一个视图及调用方法[表固定,作为参数]
  • MyCat1.6返回参数存储过程调用示例

    千次阅读 2017-05-09 16:51:16
    本例环境:SpringMVC3.x + Mybatis3.x + Mycat1.6 + Mysql5.6。...1、创建带出参存储过程 DELIMITER && CREATE PROCEDURE `test_proc`( in a_id int , out a_goods_id int) BEGIN SELECT a.goods_id I...
  • Oracle--存储过程概述、创建执行

    千次阅读 2020-01-04 18:27:25
    存储过程是一种命名PL/SQL程序块,它将一些相关的SQL语句、流程控制语句组合在一起,用于执行某些特定的操作或者任务,可以将经常需要执行的特定的操作写成过程。通过过程名,就可以多次调用过程,从而实现程序的...
  • 所以需要使用存储过程,为了方便演示,本文只以创建简单的用户记录为主,研究为什么使用。 一 创建mysql存储过程存储过程中有两个参数(in usernme,out result_id) 使用navicat做工具 insert into f_user...
  • 【Oracle】带参数存储过程

    千次阅读 2018-07-23 21:42:37
    1、创建存储过程 create procedure updatedemo (ageparam IN number) as begin update demo set age = ageparam; commit; end; / 2、传参执行 begin updatedemo(20); end; / 3、为存储过程设置参数的默认值 ...
  • c#调用Mysql带参数存储过程

    千次阅读 2015-09-14 15:42:31
    1.首先创建一个带参数存储过程存储过程名称=proc_bookinfo 存储过程2个参数 一个in 一个out in参数名称=ispay out参数名称=unPaycount这个存储过程 根据传入的未支付字段名称 输出未支付的商品数量DELI
  • mysql,sqlserver存储过程创建执行

    千次阅读 2018-07-30 14:19:13
    mysql,sqlserver存储过程...创建不带参数存储过程: CREATE PROCEDURE 'ProName' AS SELECT * FROM [dbo].[TABLE_1] go 创建带参数的存储过程: CREATE PROCEDURE 'ProName' @params varchar(10) AS ...
  • 系统存储过程是系统创建存储过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程。尽管...
  • 带参数存储过程 存储过程允许带有参数,参数的使用将增加存储过程的灵活性,给数据库编程带来极大的方便。 存储过程中如果使用了参数,在执行存储过程时必须为其指定参数。总的来说,参数可以是常量、变量和表达式...
  • --创建一个带参数存储过程 --创建一个带参数存储过程 --为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水 /* begin raisesalary(6755); raisesalary(4456); commit();//这里提交,所以说我们...
  • 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字给出参数(如果该存储过程带参数)来执行它。在大型数据库系统中,...
  • Oracle 存储过程创建执行入门实例

    千次阅读 2015-07-04 11:45:01
    以下emp表是orcl数据库实例自带的表。 执行存储过程前,必须先执行 SET serveroutput ON;...1. 不带参数 A. 创建语句: create or replace PROCEDURE EMP_COUNT AS V_TOTAL NUMBER(10); BEGIN SELECT COUNT(*) I
  • 这篇文章主要介绍了oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包等相关资料,需要的朋友可以参考下 oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数...
  • mysql 有无参数存储过程

    千次阅读 2016-11-10 20:09:05
    1、无参数存储过程:{call procedure_name} 2、仅有输入参数的存储过程:{call procedure_name(?,?…)}。 这里?表示输入参数,创建存储过程时用in表示输入参数 3、仅有输出参数的存储过程:{cal
  • Oracle 使用OUT参数创建/调用存储过程

    千次阅读 2017-05-02 17:55:09
    1.OUT类型的参数存储过程传入值,然后由用户接受参数值。下面通过SCOTT.EMP表创建一个搜索过程,该过程将根据所提供的EMPNO列的值检索雇员的ENAME和SAL SQL> create or replace procedure search_employee( 2 ...
  • 存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有 调用方式:call GetUsersDynamic('age /********动态查询用户的信息********/ CREATE PROCEDURE GetUsersDynamic(Where...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 403,832
精华内容 161,532
关键字:

创建并执行不带参数的存储过程