I have a stored procedure running in SQL Server 2000 which returns a value
when I run it in SQL Server Management Studio 2008 (SMS). I have also tested
it in SQL Server 2000 Query Analyzer with the same result. However, when I
run it with VB.Net 2010 I get "nothing" as the value of the return parameter:
cmd.Parameters( "@ReturnCount") .Value.
How do I get a value back? The parameter I am testing on is @ReturnCount.
I will need it to work for the return code also - @ReturnCode.
I have searched the web and found quite a few examples and tried them, but
they do not work with this code.
(I have simplified the procedure for testing. I am using dynamic SQL
because the SELECT in the actual procedure uses a parameter on the FROM
clause. I use sp_executesql in order to get a return value from the
dynamic SQL.)
when I run it in SQL Server Management Studio 2008 (SMS). I have also tested
it in SQL Server 2000 Query Analyzer with the same result. However, when I
run it with VB.Net 2010 I get "nothing" as the value of the return parameter:
cmd.Parameters( "@ReturnCount") .Value.
How do I get a value back? The parameter I am testing on is @ReturnCount.
I will need it to work for the return code also - @ReturnCode.
I have searched the web and found quite a few examples and tried them, but
they do not work with this code.
(I have simplified the procedure for testing. I am using dynamic SQL
because the SELECT in the actual procedure uses a parameter on the FROM
clause. I use sp_executesql in order to get a return value from the
dynamic SQL.)
Code:
/*
Test procedure:
declare @ReturnCount int
declare @ReturnCode int
exec dbo.spSampGroupPRptgS 'mltpsdb02',
'prodreporting',
'''100000015''',
@ReturnCode output
*/
if exists (select *
from dbo.sysobjects
where id = object_id(N'dbo.spSampGroupPRptgS') and
OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure dbo.spSampGroupPRptgS
GO
CREATE PROCEDURE dbo.spSampGroupPRptgS
( @PRptgDBServer varchar(30),
@PRptgDatabase varchar(30),
@GroupParentIDs varchar(4000),
@ReturnCode int output
)
AS
SELECT @ReturnCode = 0
DECLARE @SQL nvarchar(4000)
DECLARE @ReturnCount int
SELECT @SQL=
N'SELECT @ReturnCount = Count(*)
FROM GroupTestData
WHERE Parent_Group_Id in ('+@GroupParentIDs+')
'
DECLARE @params nvarchar(500)
SET @params =
N'@PRptgDBServer nvarchar(30),
@PRptgDatabase nvarchar(30),
@GroupParentIDs nvarchar(4000),
@ReturnCount int output'
EXEC sp_executesql @SQL,
@params,
@PRptgDBServer = @PRptgDBServer,
@PRptgDatabase = @PRptgDatabase,
@GroupParentIDs = @GroupParentIDs,
@ReturnCount = @ReturnCount OUTPUT
SELECT @ReturnCount
GO
----------------------------------------------------------
Public Function GetGroupParents(ByRef GroupParentsArg(,) As String) As Boolean
Dim cmd As New SqlCommand
Dim drGroupParents As SqlDataReader
Dim cnString As String = gConnectionString
Dim cn As New SqlConnection(cnString)
Dim MaxRowCount As Integer
Dim RowCount As Integer
GetGroupParents = True
Try
cmd.CommandTimeout = 1200
cmd.CommandText = "dbo.spSampGroupPRptgS"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@PRptgDBServer", SqlDbType.VarChar, 30).Value = gPRptgDBServer
cmd.Parameters.Add("@PRptgDatabase", SqlDbType.VarChar, 30).Value = gPRptgDatabase
cmd.Parameters.Add("@GroupParentIDs", SqlDbType.VarChar, 4000).Value = gGroupParentIDs
cmd.Parameters.Add("@ReturnCount", SqlDbType.Int)
cmd.Parameters("@ReturnCount").Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add("@ReturnCode", SqlDbType.Int)
cmd.Parameters("@ReturnCode").Direction = ParameterDirection.Output
' Call spSampGroupPRptgS to get Parent Group Name, Product ID's, and Group ID's
cmd.Connection = cn
cmd.CommandType = CommandType.StoredProcedure
cn.Open()
drGroupParents = cmd.ExecuteReader
If drGroupParents.HasRows Then
MaxRowCount = CInt(cmd.Parameters("@ReturnCount").Value)
MessageBox.Show("MaxRowCount: " & MaxRowCount, Application.ProductName)
ReDim GroupParentsArg(MaxRowCount, 4)
RowCount = 0
While drGroupParents.Read()
GroupParentsArg(RowCount, 0) = Trim(drGroupParents.Item("ParentGroupId").ToString)
GroupParentsArg(RowCount, 1) = Trim(drGroupParents.Item("ParentGroupName").ToString)
GroupParentsArg(RowCount, 2) = Trim(drGroupParents.Item("ProductId").ToString)
GroupParentsArg(RowCount, 3) = Trim(IIf(Not IsDBNull(drGroupParents.Item("GroupId")), _
drGroupParents.Item("GroupId"), "").ToString)
RowCount += 1
End While
Else
If Not gSilentMode Then
MessageBox.Show("No Group ProdReporting Data Found", _
Application.ProductName & " No Group ProdReporting Data Found")
End If
InformationHandler("No Group ProdReporting Data Found", "")
GetGroupParents = False
Exit Function
End If
Catch ex As Exception
ErrorHandler("DataAccessModule.GetGroupParents", "", ex)
GetGroupParents = False
End Try
End Function
Comment