我收到错误说:
未处理的类型' System.InvalidCastException'发生在Microsoft.VisualBasic.dll中 附加信息:从字符串转换"管理员"输入'布尔'无效。
当我运行程序时输入正确的用户名和密码值我没有收到错误,当我输入错误的值时,If
语句正确进行。
我重复了无数次的节目,但仍然得到了这个错误。这是我的代码:
Public Class Login
Dim Password As String
Dim Username As String
Private Sub Login_Load(sender As Object, e As EventArgs) Handles MyBase.Load
//TODO: This line of code loads data into the "DatabaseADataSet.Logon" table. You can move, or remove it, as needed.
Me.LogonTableAdapter.Fill(Me.DatabaseADataSet.Logon)
End Sub
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Username = txtUsername.Text
Password = txtPassword.Text
CheckUser(Username, Password)
End Sub
Function CheckUser(Username As String, Password As String) As String
If Me.LogonTableAdapter.ScalarQuery(Username, Password) = True Then
MessageBox.Show("Login Succesful")
Else
MessageBox.Show("Login unsuccesful, would you like to register", "Unsuccesful login.", MessageBoxButtons.YesNo)
If DialogResult.Yes Then
frmRegister.Show()
End If
End If
End Function
End Class
答案 0 :(得分:1)
如Tim所提到的(选项严格为+1),知道ScalarQuery的作用会更有帮助。
假设您的ScalarQuery在SQL查询上执行ExecuteScalar
,它将返回查询的第一列。在这种情况下,看起来你传入了“管理员”。它的相应密码。由于您提供的查询是选择Username列作为第一个序号,这是您的ScalarQuery返回的内容。自从" Admin" (字符串)无法强制转换为True
(布尔值) - 您会收到您发布的错误。
根据您发布的内容,您希望构建SQL查询以返回可以强制转换的布尔值,或者更改IF条件以应用正确的逻辑。
答案 1 :(得分:0)
ScalarQuery返回什么?真/假的字符串?
如果是,那么与" true"进行比较或" false":
If Me.LogonTableAdapter.ScalarQuery(Username, Password) = "True" Then
正如其他人所说,你应该打开OPTION STRICT
答案 2 :(得分:0)
它返回结果集中第一行的第一列或Null Reference。后者可以转换为False但是给定单元格的内容不能转换为True。
答案 3 :(得分:0)
我为未来的任何人解决了这个问题。我更改了if语句以查看值是否为空。
If Me.LogonTableAdapter.ScalarQuery(Username, Password) IsNot Nothing Then