【发布时间】:2018-05-05 09:13:40
【问题描述】:
警告 BC42104:变量“pass”在被赋值之前被使用。运行时可能会导致空引用异常。
这是我的代码:
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Dim uname As String = ""
Dim pword As String
Dim username As String = ""
Dim pass As String
If TextBox1.Text = "" Or TextBox2.Text = "" Then
MsgBox("Please fill the info")
Else
uname = TextBox1.Text
pword = TextBox2.Text
Dim query As String = "Select Password From Register where Username= '" & uname & "';"
Dim dbsource As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Gui\Documents\Database4.accdb"
Dim conn = New OleDbConnection(dbsource)
Dim cmd As New OleDbCommand(query, conn)
conn.Open()
Try
pass = cmd.ExecuteScalar().ToString
Catch ex As Exception
MsgBox("Username does not exit")
End Try
If (pword = pass) Then
MsgBox("Login success")
Reg.Show()
If Reg.Visible Then
Me.Hide()
End If
Else
MsgBox("login Failed")
TextBox1.Clear()
TextBox2.Clear()
End If
End If
End Sub
【问题讨论】:
-
请使用您最喜欢的搜索引擎并输入错误编号。您将找到数以千计的链接来解释问题。其中很多都是同一个网站上的问题和答案。
-
我已经做过了,但是其中大多数都太复杂了,无法理解我是编程新手,我想了解更多。但我一直看到这个错误。
-
所以让我们再次尝试阅读错误消息:变量'inst'在被赋值之前被使用变量inst是上面的代码中没有任何地方。所以错误信息与这个sn-p无关。最好在您的代码中使用这个名为 inst 的变量并在此处添加该代码。
-
我很抱歉变量是“通过”而不是“inst”错过了这个问题。
-
好吧,现在假设你的 pass = cmd.ExecuteScalar().ToString 行触发了一个异常。代码将继续到catch 块而不在变量pass 中设置值。在代码从 catch 块中退出后,您将 pass 的值与 pword 进行比较。你现在看到问题了吗?编译器试图告诉你这个问题并且不允许你的代码被编译。您只需将 pass 变量设置为默认值即可修复它,就像您已经对 uname 所做的那样
标签: visual-studio visual-studio-2010 visual-studio-2012