When you call ExecuteReader() on a SqlCommand object that has OUTPUT parameters you won’t be able to access the OUTPUT parameters until the SqlDataReader has been closed.
Private Shared Sub SomeMethod() Using Con As New SqlConnection("DSN...") Con.Open() Using Com As New SqlCommand("MyProc", Con) Com.CommandType = System.Data.CommandType.StoredProcedure Com.Parameters.Add(New SqlParameter("@YourOutputParam", System.Data.SqlDbType.Int) With {.Direction = Data.ParameterDirection.Output}) Using RDR = Com.ExecuteReader() ''Using the line below will fail 'Dim X = Com.Parameters("@YourOutputParam").Value Do While RDR.Read 'Do stuff with your recordset... Loop End Using ''This will work because the Using block closes the SqlDataReader 'Dim X = Com.Parameters("@YourOutputParam").Value End Using Con.Close() End Using End Sub