VB.net nullreferenceexception在dr.read中未处理

时间:2014-01-10 05:22:09

标签: sql vb.net nullreferenceexception

所以我正在使用以下代码处理我的库上的登录部分:

 While dr.Read
        If txtPassword.Text = dr("LibrarianPassword") And txtUserName.Text = dr("LibrarianID") Then
            main.Show()
        Else
            MsgBox("Username and password mismatch!", MsgBoxStyle.Critical, "Login error")
        End If
    End While

while dr.read行给了我一个nullreferenceexception在编译器评估main.show行时显示未处理的错误(显示我系统的主要部分)并且我上一次工作时没有得到错误它...

2 个答案:

答案 0 :(得分:0)

如果值为null,则首先检查该值,无法将Null值与其他数据类型进行比较。

While dr.Read
        If txtPassword.Text = IIf(IsDBNull( dr("LibrarianPassword")), "",  dr("LibrarianPassword")) And txtUserName.Text = IIf(IsDBNull(dr("LibrarianID")), "", dr("LibrarianID")) Then
            main.Show()
        Else
            MsgBox("Username and password mismatch!", MsgBoxStyle.Critical, "Login error")
        End If
End While

答案 1 :(得分:0)

所以我最终重建了系统..得到了同样的错误,但这次我从我的主窗体中删除了这些代码行:

 Private Sub frmLibSystemMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    open_con()

    sqlSearch = "select * from tblBooks"

    cmd = New OleDbCommand(sqlSearch, con)
    dr = cmd.ExecuteReader

    While dr.Read
        lsvBooks.Items.Add(dr("AccessionNumber"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("BookCode"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("Title"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("Author"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("Category"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("Publisher"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("PublicationYear"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("Edition"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("NumPages"))
        lsvBooks.Items(lsvBooks.Items.Count - 1).SubItems.Add(dr("CopiesAvailable"))
    End While

    dr.Close()
    dr = Nothing
    cmd = Nothing
    sqlSearch = Nothing
    con.Close()
End Sub

令我惊讶的是,它解决了这个问题。我不知道它是如何或为什么解决了这个问题,但它只是做到了。但是,如果我从我的主要删除它,我将如何加载书籍列表..