各位高手,情况是这样的:
我在一个ASP.NET页面中调用存储过程Pr_QueryDocument,需要返回一个记录集。
存储过程简化如下:
ALTER PROCEDURE [dbo].[Pr_QueryDocument] 
    @CategoryID   int,
    @SN           varchar(200),
    @Name         varchar(200),
    @sDate varchar(50),
    @eDate varchar(50),
    @Sender varchar(200),
    @SavePlace varchar(50),
    @Cabinet int,
    @Status int
ASBegin
Declare @Sel As varchar(400)
Set @Sel = 'Selcet * From Document'
Exec(@Sel)
End
其中最后一句改成 Exec sp_execute @Sel也无法返回值。
但是如果直接写成:
ALTER PROCEDURE [dbo].[Pr_QueryDocument] 
    @CategoryID   int,
    @SN           varchar(200),
    @Name         varchar(200),
    @sDate varchar(50),
    @eDate varchar(50),
    @Sender varchar(200),
    @SavePlace varchar(50),
    @Cabinet int,
    @Status int
ASBegin
    Selcet * From Document
End
又能返回值请问这是怎么回事呢??
上面中的参数,为了测试暂时没有写入到Select中。因为这个过程是动态查询档案的,所以无法像第二种方法那样直接写查询语句。
在下在这里静候各位高手指导,不吝赐教啊!!

解决方案 »

  1.   

    第一种情况,我在ASP.NET页面中会报错:异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
    错误就是dr.Read():
    while(dr.Read())
    { ..... }
      

  2.   

    Begin
    Declare @Sel As string(400)
    Set @Sel = N'Selcet * From Document'
    Exec(@Sel)
    End
      

  3.   

    因为你返回的是null,所以asp.net会抓不到,你最好加入判断,判断空值的时候要如何,不然会报你这个错的。另外,你那个存储过程先print出来看看
      

  4.   

    SQLServer没有string类型的啊,我在我的2008R2上会报错的。
      

  5.   

    Begin
    Declare @Sel As string(400)
    Set @Sel = N'Selcet * From Document'
    Exec(@Sel)
    End在'Select × From Document'前面加上“N”后,就正常出来了
    请问一下加的这个"N"是什么意思呢?(偶是新手,问的很初级)另:我将其中一个参数加上后,又不行了:
    Set @Sel = N'Selcet * From Document' + N'Where CategoryID = ' + @CategoryID
    Exec(@Sel)
    又没有返回了
      

  6.   


    Set @Sel = N'Selcet * From Document' + N'Where CategoryID = ' + @CategoryID
    --Where前面要用空格吧
    Set @Sel = N'Selcet * From Document' + N' Where CategoryID = ' + @CategoryID
      

  7.   

    上面申明中@Sel不是string(400),而是varchar(400)
      

  8.   

    N是转换为nvarchar类型,不过奇怪的是你这里又不包含多语言,需要这样吗?
      

  9.   

    --Where前面要用空格吧
    Set @Sel = N'Selcet * From Document' + N' Where CategoryID = ' + @CategoryIDwhere前面加上空格之后还是不行
    为了怕是 @CategoryID的值没有传过来,我直接赋值也不行:
    Set @Sel = N'Selcet * From Document' + N' Where CategoryID = ' + 7
      

  10.   

    N是转换为nvarchar类型,不过奇怪的是你这里又不包含多语言,需要这样吗?我也不知道啊,但最开始的时候不用N就不行,用了就对了
      

  11.   

    还有人在吗?
    确实是需要在前面加一个N才可以
    但是Set @Sel=N'Select * From Document Where Doc_SN like '%' + N'd' + N'%''在这个语句里,like后面的%%前后需要加上单引号''
    那么单引号怎么添加呢?好像不是在单引号前面用\
    那应该用什么呢?