Solved

IndexOutOfRangeException

Posted on 2006-10-23
2
319 Views
Last Modified: 2008-02-01
Hi Experts,

I'm having a weird problem that I can't explain. I am trying to validate a user from the log in form. To do this I call a user class and run the validation function. But when I try to check if the user's status is set to 1 I get a IndexOutOfRangeException error.

Here is the full error:

Server Error in '/' Application.
--------------------------------------------------------------------------------

status
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IndexOutOfRangeException: status

Source Error:


Line 98:             'Make sure user is active
Line 99:
Line 100:            If (rs("status") <> 1) Then
Line 101:                Return False
Line 102:            End If
 

Source File: e:\inetpub\wwwroot\App_Code\User.vb    Line: 100

Stack Trace:


[IndexOutOfRangeException: status]
   System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +1358263
   System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +102
   System.Data.SqlClient.SqlDataReader.get_Item(String name) +12
   User.ValidateUser() in e:\inetpub\wwwroot\App_Code\User.vb:100
   _Default.btn_login_Click(Object sender, EventArgs e) in e:\inetpub\wwwroot\Default.aspx.vb:36
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102

 


--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.42

Here is my class: (disregard loaduser, count users, and display users)
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Data
Imports System.Data.Sql
Imports Microsoft.VisualBasic


Public Class User

    Private _conn As SqlConnection
    'Variables for auditor
    Private _userId As Integer
    Private _userName As String
    Private _password As String
    Private _csa As String
    Private _status As Integer
       
    'Connection Property
    Public WriteOnly Property conn() As SqlConnection
        Set(ByVal Value As SqlConnection)
            _conn = Value
        End Set
    End Property

    Public Property userId() As Integer
        Get
            Return _userId
        End Get
        Set(ByVal value As Integer)
            _userId = value
        End Set
    End Property
   
    Public Property userName() As String
        Get
            Return _userName
        End Get
        Set(ByVal Value As String)
            _userName = Value
        End Set
    End Property

    Public Property password() As String
        Get
            Return _password
        End Get
        Set(ByVal Value As String)
            _password = Value
        End Set
    End Property

    Public Property csa() As String
        Get
            Return _csa
        End Get
        Set(ByVal Value As String)
            _csa = Value
        End Set
    End Property

    Public Property status() As String
        Get
            Return _status
        End Get
        Set(ByVal Value As String)
            _status = Value
        End Set
    End Property

    Public Sub New()
        init()
    End Sub

    Private Sub init()
        _userId = -1
        _userName = ""
        _password = ""
        _csa = ""
        _status = 1

    End Sub

    Public Function ValidateUser() As Boolean



        Dim cmd As New SqlCommand("sp_validateUser", _conn)
        _conn.Open()

        Dim rs As SqlDataReader
        cmd.CommandType = Data.CommandType.StoredProcedure
        cmd.Parameters.Add("@userName", Data.SqlDbType.VarChar, 50).Value = _userName
        cmd.Parameters.Add("@password", Data.SqlDbType.VarChar, 50).Value = _userName
        rs = cmd.ExecuteReader()

        If rs.Read() Then

            'Make sure user is active

            If (rs("status") <> 1) Then
                Return False
            End If

            _userId = rs("userId")
            _userName = rs("userName")
            _csa = rs("csa")
            _status = rs("status")

            rs.Close()
            _conn.Close()
            Return True
        Else
            rs.Close()
            _conn.Close()
            Return False
        End If
        rs.Close()

        _conn.Close()

    End Function

    Public Function LoadUser(ByVal userId As Integer)
        Dim rs As SqlDataReader
        Dim cmd As New SqlCommand("sp_selectUserDetail", _conn)
        cmd.CommandType = Data.CommandType.StoredProcedure
        cmd.Parameters.Add("@userId", Data.SqlDbType.Int).Value = userId
        rs = cmd.ExecuteReader()
        If rs.Read() Then

            _userId = rs("userId")
            _userName = rs("userName")
            _csa = rs("csa")
            _status = rs("status")

            Return True
        Else            
            Return False
        End If
        rs.Close()
    End Function

    Public Function DisplayUsers()
        Dim rs As SqlDataReader

        Dim cmd As New SqlCommand("sp_selectActiveUsers", _conn)
        cmd.CommandType = Data.CommandType.StoredProcedure

        rs = cmd.ExecuteReader()

        While rs.Read()            
            _userId = rs("userId")
            _userName = rs("userName")
            _csa = rs("csa")
            _status = rs("status")

        End While
        rs.Close()
        Return Nothing
    End Function

    Public Function CountUsers(ByVal filterID As Integer)
        Dim rs As SqlDataReader
        Dim count As String = "0"
        Dim thisFilter As Integer = CInt(filterID)

        'set filter default
        If thisFilter = 0 Then
            thisFilter = 1
        End If

        'Open Database Connection
        Dim conn As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("conn"))
        conn.Open()

        Dim cmd As New SqlCommand("sp_Count_Users", conn)
        cmd.CommandType = Data.CommandType.StoredProcedure
        cmd.Parameters.Add("@UserStatusID", Data.SqlDbType.Int).Value = thisFilter

        rs = cmd.ExecuteReader()

        If rs.Read() Then
            'User Found
            count = rs("getCount")
        End If

        conn.Close()

        Return count
    End Function

   



End Class


Here is how I am calling te class:
Dim user As New User            

            Dim conn As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("conn"))
            user.conn = conn            

            user.userName = username
            user.password = password

            If (user.ValidateUser() = True) Then
                Response.Write("user passed")
            Else
                Response.Write("user failed")
            End If


Thanks in advance
-Javier

0
Comment
Question by:jmar_click
2 Comments
 
LVL 15

Accepted Solution

by:
crisco96 earned 500 total points
ID: 17794424
Your stored procedure 'sp_validateUser' isn't selecting a field named 'status'. Make sure that this is being selected in the stored procedure. Post the stored procedure code if you need more help.
0
 
LVL 3

Author Comment

by:jmar_click
ID: 17797182
thanks crisco,

You were right, turned out I forgot to change the stored procedure to select the status field as well. I thought I had done that and forgot to double check.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

ASP.Net to Oracle Connectivity Recently I had to develop an ASP.NET application connecting to an Oracle database.As I am doing it first time ,I had to solve several problems. This article will help to such developers  to develop an ASP.NET client…
User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now