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