Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在codebehind中获取sql的输出参数_Asp.net_Vb.net - Fatal编程技术网

Asp.net 如何在codebehind中获取sql的输出参数

Asp.net 如何在codebehind中获取sql的输出参数,asp.net,vb.net,Asp.net,Vb.net,我的存储过程是这样的 ALTER PROCEDURE [dbo].[GetImagesByDesignId] @DesignID bigint, @RegID bigint, @PageIndex INT, @NumRows INT, @ImageCount INT OUTPUT AS BEGIN SELECT @ImageCount=(SELECT COUNT(*) FROM DocMana

我的存储过程是这样的

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

BEGIN

    SELECT @ImageCount=(SELECT COUNT(*) FROM DocManagement where DesignID=@DesignID and RegID=@RegID)

    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  DesignID=@DesignID and RegID=@RegID
    )

    Select RegID, DesignID,ImageName
    FROM ImageEntries
    WHERE Row between 
    @startRowIndex and @StartRowIndex+@NumRows-1

END
我正在调用我的codebehind中的StoredProcess作为

Dim dt As DataTable = objUpload.GetDocuments(lngRegID, lngDesignID)
            dlView.DataSource = dt
            dlView.DataBind()
dlView是datalist。方法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
问题是我想在codebehind中获取datattable和imagecount。我如何将datatable和imagecount返回给codebehind。有人能帮忙吗

Public Function GetDocuments(ByVal lngRegID As Long, ByVal lngDesID As Long, ByRef strOutput As String) As DataTable
您可以使用并传递字符串变量作为引用,并在方法中设置它。
strOutput
的引用将传递给您的方法,当您在方法中设置该变量的值时,您可以在方法调用后返回更改的值

Dim strOutput As String = Nothing
Dim dt As DataTable = GetDocuments(lngRegID, lngDesID, strOutput)
Console.WriteLine(strOutput)
您可以使用并传递字符串变量作为引用,并在方法中设置它。
strOutput
的引用将传递给您的方法,当您在方法中设置该变量的值时,您可以在方法调用后返回更改的值

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

您可以创建一个类来使用保存数据表和图像计数的are返回值。也可以通过引用将变量作为参数发送:

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

时,您可以创建一个类来使用保存数据表和图像计数的are返回值。也可以通过引用将变量作为参数发送:

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