为什么我的函数不能返回真值?

时间:2014-11-17 12:54:55

标签: vb.net

我收到错误说:

  

未处理的类型' 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

4 个答案:

答案 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)

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar%28v=vs.110%29.aspx

它返回结果集中第一行的第一列或Null Reference。后者可以转换为False但是给定单元格的内容不能转换为True。

答案 3 :(得分:0)

我为未来的任何人解决了这个问题。我更改了if语句以查看值是否为空。

If Me.LogonTableAdapter.ScalarQuery(Username, Password) IsNot Nothing Then