我正在尝试检查我的 MySQL 数据库中是否存在用户名和密码,如果存在,我需要返回 true,否则返回 false。这是我的 atm:
myconn.Open()
Dim selectSQL As String = "SELECT *
FROM member
WHERE Username = " & objMember.Username & "
AND Password= " & objMember.Password
Dim cmd As New OdbcCommand(selectSQL, myconn)
cmd.ExecuteNonQuery()
If cmd.Parameters.Count = 1 Then
Return True
Else
Return False
End If
myconn.Close()
myconn.Dispose()
我得到的只是 0,即使用户名和密码存在!或者我的编码有误?
解决方案
myconn.Open()
Dim count As Integer = 0
Dim selectSQL As String = "SELECT COUNT(*)
FROM member
WHERE Username = ?
AND Password= ?"
Dim cmd As New OdbcCommand(selectSQL, myconn)
cmd.Parameters.AddWithValue("LidLoginnaam", objLid.LidLoginnaam)
cmd.Parameters.AddWithValue("LidWachtwoord", objLid.LidWachtwoord)
count = Convert.ToInt32(cmd.ExecuteScalar())
If count = 1 Then
Return True
Else
Return False
End If
myconn.Close()
myconn.Dispose()
最佳答案
不要使用字符串连接来构建 SQL 查询,而是使用参数。
http://msdn.microsoft.com/en-us/library/system.data.odbc.odbcparameter.aspx
Dim count as Integer = 0
Try
Dim sql As String = "SELECT COUNT(*) FROM member WHERE Username = @username AND Password = @password"
Dim cmd As New SqlCommand(sql, conn)
cmd.Parameters.AddWithValue("@username", objMember.Username)
cmd.Parameters.AddWithValue("@password", objMember.Password)
count = Convert.ToInt32(cmd.ExecuteScalar())
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Return (count > 0)
如果您不使用从查询中检索到的数据,则只需使用 ExecuteScalar 获取与您的用户名和密码匹配的记录数。
http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.executescalar.aspx
如果计数 > 0(意味着有匹配用户名和密码的记录),这基本上返回 TRUE。
另请在此处查看不同命令执行方法之间的区别:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand(v=vs.71).aspx .您正在使用 ExecuteNonQuery 来检索不正确的记录。
希望这对您有所帮助。
关于mysql - ODBC select 语句获取 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005209/