2009-08-21 71 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) 
相關問題