Public Overloads Function ExecuteStoredProcedure(ByVal page As Integer, ByVal pageSize As Integer, _
ByRef recordCount As Long, ByVal connection As System.Data.SqlClient.SqlConnection, ByVal storedProcedureName As String, _
ByRef returnObject As DataSet, ByVal sqlParameters() As SqlParameter, _
Optional ByVal includeReturnValue As Boolean = True, _
Optional ByVal mustCloseConnection As Boolean = False) As Hashtable
Dim i, j As Int16
Dim dataAdapter As New System.Data.SqlClient.SqlDataAdapter
Dim returnValues As New Hashtable(New CaseInsensitiveHashCodeProvider, New CaseInsensitiveComparer)
Try
OpenConnection(connection)
Dim command As New System.Data.SqlClient.SqlCommand(storedProcedureName, connection)
[B]command.CommandTimeout = 0 [/B]
command.CommandType = CommandType.StoredProcedure
If Not (sqlParameters Is Nothing) Then
For i = 0 To CType(sqlParameters.Length - 1, Short)
command.Parameters.Add(sqlParameters(i))
Next
End If
If includeReturnValue Then
Dim returnValue As New SqlParameter("@RETURN_VALUE", SqlDbType.BigInt)
returnValue.Direction = ParameterDirection.ReturnValue
command.Parameters.Add(returnValue)
End If
dataAdapter.SelectCommand = command
If TypeName(returnObject).ToUpper = ("DataSet").ToUpper Then
recordCount = dataAdapter.Fill(CType(returnObject, DataSet), pageSize * (page - 1), pageSize, dataAdapter.DefaultSourceTableName)
If CType(returnObject, DataSet).Tables(0).Rows.Count = 0 Then
recordCount = 0
Else
recordCount = CLng(CType(returnObject, DataSet).Tables(0).Rows(0)("Paging_Rec_Cnt").ToString)
End If
returnValues.Add("dataAdapter", dataAdapter)
Else
command.ExecuteNonQuery()
returnObject = Nothing
End If
returnValues.Add("Error", 0)
If includeReturnValue Then returnValues.Add("@RETURN_VALUE", command.Parameters("@RETURN_VALUE").Value)
Dim sqlParameter As SqlParameter
For Each sqlParameter In command.Parameters
If sqlParameter.Direction = ParameterDirection.InputOutput Or sqlParameter.Direction = ParameterDirection.Output Then
returnValues.Add(sqlParameter.ParameterName.ToString, sqlParameter.Value)
End If
Next
command.Dispose()
Return (returnValues)
Catch sqlex As SqlException
returnValues.Add("Error", -1)
LogException(sqlex)
Return (returnValues)
Throw sqlex
Catch ex As Exception
returnValues.Add("Error", -1)
LogException(ex)
Return (returnValues)
Throw ex
Finally
dataAdapter.Dispose()
If mustCloseConnection Then CloseConnection(connection)
End Try
End Function