Solved

IndexOutOfRangeException

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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

I have developed many web applications with asp & asp.net and to add and use a dropdownlist was always a very simple task, but with the new asp.net, setting the value is a bit tricky and its not similar to the old traditional method. So in this a…
Introduction This article shows how to use the open source plupload control to upload multiple images. The images are resized on the client side before uploading and the upload is done in chunks. Background I had to provide a way for user…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

737 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