2009-08-21 68 views
0

我的存储过程就像这样。如何在代码隐藏中获取sql的输出参数

ALTER PROCEDURE [dbo].[GetImagesByDesignId] 
     @DesignID bigint, 
     @RegID bigint, 
     @PageIndex INT, 
     @NumRows INT, 
     @ImageCount INT OUTPUT 
    AS 

BEGIN 

    SELECT @ImageCount=(SELECT COUNT(*) FROM DocManagement where [email protected] and [email protected]) 

    Declare @startRowIndex INT; 
    set @startRowIndex = (@PageIndex * @NumRows) + 1; 

    With ImageEntries as (
     SELECT ROW_NUMBER() OVER (ORDER BY DocumentID ASC) as Row, RegID, DesignID,ImageName 
     FROM DocManagement 
     WHERE [email protected] and [email protected] 
    ) 

    Select RegID, DesignID,ImageName 
    FROM ImageEntries 
    WHERE Row between 
    @startRowIndex and @[email protected] 

END 

我在我隐藏的

Dim dt As DataTable = objUpload.GetDocuments(lngRegID, lngDesignID) 
      dlView.DataSource = dt 
      dlView.DataBind() 

dlView调用StoredProcedure的是datalist.Method GetDocuments写在另一个类这样

Public Function GetDocuments(ByVal lngRegID As Long, ByVal lngDesID As Long) As DataTable 
      Try 

       Dim db As Database = DatabaseFactory.CreateDatabase() 
       Dim DbCommand As DbCommand = db.GetStoredProcCommand("GetImagesByDesignId") 
       db.AddInParameter(DbCommand, "@RegID", DbType.Int64, lngRegID) 
       db.AddInParameter(DbCommand, "@DesignID", DbType.Int64, lngDesID) 
       db.AddInParameter(DbCommand, "@PageIndex ", DbType.Int32, intPageIndex) 
       db.AddInParameter(DbCommand, "@NumRows ", DbType.Int32, intNumRows) 
       db.AddOutParameter(DbCommand, "ImageCount", DbType.Int32, 250) 
       Return db.ExecuteDataSet(DbCommand).Tables(0) 
       Dim strOutput() As String = {db.GetParameterValue(DbCommand, "ImageCount").ToString} 

      Catch ex As Exception 
      End Try 

     End Function 

问题是我想作为datattable以及代码隐藏的imagecount。如何返回数据表和imagecount代码隐藏。可以帮助任何人?

回答

2

您可以创建一个类来使用它是既包含数据表又包含图像计数的返回值。或者您可以通过参考发送变量作为参数:

Public Function GetDocuments(ByVal regID As Long, ByVal desID As Long, ByRef imageCount As Integer) As DataTable 

在该方法中,您只需设置imageCount的值。

在您的存储过程中,您不需要嵌套查询来获取计数。只是这样做:

select @ImageCount = count(*) 
from DocManagement 
where DesignID = @DesignID and RegID = @RegID 

注:
我看你有没有这事一Catch块。 从来没有做到这一点。你正在捕捉异常并忽略它们,这只会导致问题。

在极少数情况下,您实际上需要捕获异常并忽略它,您应该至少在Catch块内部发表评论,解释忽略它的原因。

此外,您正在捕捉基类Exception,当你应该捕捉更具体的类如SqlException

1
Public Function GetDocuments(ByVal lngRegID As Long, ByVal lngDesID As Long, ByRef strOutput As String) As DataTable 

您可以使用ByRef并传递一个字符串变量作为参考,设置它在你的方法。 strOutput的引用将被传递给你的方法,当你在该方法中设置了该变量的值时,你可以在方法调用后返回改变后的值。

Dim strOutput As String = Nothing 
Dim dt As DataTable = GetDocuments(lngRegID, lngDesID, strOutput) 
Console.WriteLine(strOutput)