In this vb.net form, I've created a login form which contains 3 fields:
1. User Name
2. Password
3. Combobox to select which which department the user belongs to.
For combobox, I've created a particular code:

Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        'da = New SqlDataAdapter("select user_dept from user_master", cn)
        'da.Fill(ds, "user_master")
        da = New SqlDataAdapter("select user_dept from user_master", cn)
        da.Fill(ds, "user_master")
        ComboBox1.DataSource = ds.Tables("user_master")
        ComboBox1.DisplayMember = "user_dept"
        MetroComboBox1.DataSource = ds.Tables("user_master")
        MetroComboBox1.DisplayMember = "user_dept"
    End Sub

On button click, I've done the following code:

 da = New SqlDataAdapter("select user_name,user_pass,user_dept from user_master", cn)
        da.Fill(ds, "user_master")
        dt = ds.Tables("user_master")
        For Each dr In ds.Tables(0).Rows
            If dr(0) = txtuname.Text And dr(1) = txtpw.Text And dr(2) = MetroComboBox1.Text Then
                s = 1
                Exit For
                s = 2
            End If
        If s = 1 Then
            MsgBox("Login Successful")
        ElseIf s = 2 Then
            MsgBox("Invalid Username or Password")
        End If
    End Sub

Still, this Exception Occurs:
An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

Additional information: Operator '=' is not defined for type 'DBNull' and string "some name or password".

1 Year
Discussion Span
Last Post by tinstaafl

It appears to me that one or more fields in one or more rows is empty, which is throwing the cast exception. Try using the Is operator instead of =:

If dr(0) Is txtuname.Text AndAlso dr(1) Is txtpw.Text AndAlso dr(2) Is MetroComboBox1.Text Then

On a side note, using AndAlso allows for shortcutting. As soon as a false value, from a comparison, is returned, the rest don't have to be read.

Also, by declaring dr as DataRow and having Option Strict turned ON, this kind of error would have been caught by Intellisense, before you even tried to run the code.

Edited by tinstaafl


The DBNull is a special case and you'll need to do a check for it with:
If Not IsDBNull(dr(0))
and contine from there.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.