我正在用Visual Basic为学校项目创建一个程序。该程序是一个非常简单的工具,可以帮助设计吉他。用户必须登录才能使用该程序。我已经设置了一个Access数据库来存储用户及其设计的所有数据。目前,登录系统使用SQL查询在数据库中查找输入的用户名:
Private Sub cmd_login_Click(sender As Object, e As EventArgs) Handles cmd_login.Click
Call Login_Validation()
provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
'access database location
dataFile = "C:\Users\Jackson\Desktop\Guitar Builder\Guitar Builder.accdb"
connString = provider & dataFile
myConnection.ConnectionString = connString
'the query:
myConnection.Open()
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [Users] WHERE [Username] = '" & usn_box_login.Text & "' AND [Password] = '" & psw_box_login.Text & "'", myConnection)
Dim dr As OleDbDataReader = cmd.ExecuteReader
' userExists is set to true if the username user is found or false if it is not found
Dim userExists As Boolean = False
'if found:
While dr.Read
userExists = True
FullName = dr("Full Name").ToString
userName = dr("Username").ToString
End While
'checking the result
If userExists = True Then
Me.Hide()
Dashboard.Show()
Dashboard.lbl_name.Text = FullName
Dashboard.lbl_username.Text = userName
Else
MsgBox("Sorry, username or password not found", MsgBoxStyle.OkOnly, "Invalid Login")
End If
usn_box_login.Clear()
psw_box_login.Clear()
myConnection.Close()
End Sub
这是有效的,但是程序中必须有二进制搜索才能通过学校的评估。实现二进制搜索以查找用户名的最简单方法是什么?
提前谢谢。
答案 0 :(得分:0)
你不能。使用像Access(或SQL Server,或SQLite等)这样的DBMS的一个优点是抽象出有关如何检索和查找数据的详细信息。
(大多数现代数据库系统使用特殊的索引结构进行快速查找,例如B树(B树不是二进制搜索树btw)
如果要求使用二元搜索来查找某些内容,则不需要使用可以为您执行此操作的内容。
由于这是用于演示数据结构的工作知识的编程练习,我认为您应该完全删除Access并将数据存储在一个简单的平面文件中,在程序启动时将其全部加载到内存中,然后使用您的算法和用于处理数据的结构,然后在用户单击“保存”按钮时将其吐出到平面文件存储区。
请注意,我猜测使用.NET Array.BinarySearch
也可能是作弊。
其他提示:
Baba O'Reilly
放在文本框中,程序将崩溃。IDisposable
个对象,最好使用Using
语句。上述要点可能听起来像是挑剔,但我认为尽早养成良好习惯很重要。雇主最不需要的是一个新员工,他因为从未习惯于正确地做事而增加了重大漏洞。
答案 1 :(得分:0)
我已经接受了您的建议并完全删除了Microsoft Access。我现在在程序中使用自己的记录结构。