Solved

IndexOutOfRangeException

Posted on 2006-10-23
2
322 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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

In an ASP.NET application, I faced some technical problems. In this article, I list them out and show the solutions that I found.  I hope it will be useful. Problem: After closing a pop-up window, the parent page should be refreshed automaticall…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…

810 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