所以我正在使用以下代码处理我的库上的登录部分:
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行时显示未处理的错误(显示我系统的主要部分)并且我上一次工作时没有得到错误它...
答案 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
令我惊讶的是,它解决了这个问题。我不知道它是如何或为什么解决了这个问题,但它只是做到了。但是,如果我从我的主要删除它,我将如何加载书籍列表..