关于存储过程不直接返回结果集的问题

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值