?
Solved

IndexOutOfRangeException

Posted on 2006-10-23
2
Medium Priority
?
349 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 2000 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

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Question has a verified solution.

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

In .NET 2.0, Microsoft introduced the Web Site.  This was the default way to create a web Project in Visual Studio 2005.  In Visual Studio 2008, the Web Application has been restored as the default web Project in Visual Studio/.NET 3.x The Web Si…
A quick way to get a menu to work on our website, is using the Menu control and assign it to a web.sitemap using SiteMapDataSource. Example of web.sitemap file: (CODE) Sample code to add to the page menu: (CODE) Running the application, we wi…
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Enter Foreign and Special Characters Enter characters you can't find on a keyboard using its ASCII code ... and learn how to make a handy reference for yourself using Excel ~ Use these codes in any Windows application! ... whether it is a Micr…
Suggested Courses
Course of the Month7 days, 23 hours left to enroll

615 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