2009-08-21 4 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 

私は私の分離コードでのStoredProcedureを呼び出していますdlViewが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 

のような別のクラスで書かれている

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

として問題は、私はのようにdatattable取得したいですコードビハインドのimagecountと同じように。コードビヘインドにdatatableと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) 
関連する問題