zoukankan      html  css  js  c++  java
  • 关于存储过程不直接返回结果集的问题

    假设现在有一个这样的存储过程:

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS OFF 
    GO
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FindTheStudents]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
    drop procedure [dbo].[FindTheStudents]
    GO


    /* 查询指定序号和入学时间的学生的存储过程 */
    create procedure FindTheStudents
    (
      
    @IDList varchar(1000),
      
    @BeginTime varchar(20),
      
    @EndTime varchar(20)
    )
    as
    begin
      
    declare @s varchar(4000)
      
    set @s='select id as "序号", name as "名字", tel as "电话" from student where classid in ('+@IDList+') and logtime between "'+@beginTime+'" and "'+@endTime+'"'
      
    exec(@s)
    end
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO

    现在在DAL层的DataSet的Adapter中要添加一个query来执行该存储过程,并返回相应的结果集。按照以往的经验,如果在存储过程中只是简单的执行
    select id, name, tel from student where classid in (1,2,3and logtime between '2005-1-1' and '2006-1-1' 
    这样一条语句,那么在生成这个存储过程的query的过程中,肯定会生成一个相应的结果集表

    但是如果使用上面存储过程的方式,也就是先构造一个查询语句@s,然后在调用exec(@s),那么vs2005并不会自动构造一个结果集的表。
    对于这样的情况,用户有两种选择:一个是自己手动的来编辑这个表;一个就是让这个表保持为空;
    对于第一种情况:
    要手动编辑这个表,当然就要能够事先预知这个表的结构,以后使用该查询的时候,返回的结果集的表头的名字就是按照这里定义的来显示;
    对于第二种情况:
    如果让这个表为空的化,以后使用该表的时候,表的内容会根据存储过程返回值的内容自动填充,如果把这个结果集和某个gridview关联的化,也可以正常显示表中的所有内容;但是用这种方式也有他的缺点,就是无法在编译的时候知道该表的行的类型;

  • 相关阅读:
    洛谷-P2430 严酷的训练
    Hackthebox网络不稳定的解决方案
    解压
    谷歌地图API密钥未授权利用
    关于读取heapdump踩的一个小坑
    RECON
    最近思考
    go get
    Js跳转
    Session
  • 原文地址:https://www.cnblogs.com/strinkbug/p/574630.html
Copyright © 2011-2022 走看看