Solved

IndexOutOfRangeException

Posted on 2006-10-23
2
330 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Lots of people ask this question on how to extend the “MembershipProvider” to make use of custom authentication like using existing database or make use of some other way of authentication. Many blogs show you how to extend the membership provider c…
Problem Hi all,    While many today have fast Internet connection, there are many still who do not, or are connecting through devices with a slower connect, so light web pages and fast load times are still popular.    If your ASP.NET page …
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

688 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