如何在Visual Basic中使用二进制搜索来搜索Microsoft Access数据库

时间:2017-02-07 20:46:16

标签: sql vb.net visual-studio ms-access binary-search

我正在用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

这是有效的,但是程序中必须有二进制搜索才能通过学校的评估。实现二进制搜索以查找用户名的最简单方法是什么?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

你不能。使用像Access(或SQL Server,或SQLite等)这样的DBMS的一个优点是抽象出有关如何检索和查找数据的详细信息。

(大多数现代数据库系统使用特殊的索引结构进行快速查找,例如B树(B树不是二进制搜索树btw)

如果要求使用二元搜索来查找某些内容,则不需要使用可以为您执行此操作的内容。

由于这是用于演示数据结构的工作知识的编程练习,我认为您应该完全删除Access并将数据存储在一个简单的平面文件中,在程序启动时将其全部加载到内存中,然后使用您的算法和用于处理数据的结构,然后在用户单击“保存”按钮时将其吐出到平面文件存储区。

请注意,我猜测使用.NET Array.BinarySearch也可能是作弊。

其他提示:

  • 不要以纯文本格式存储密码。它们也不应该加密。相反,他们应该进行哈希(最好是盐渍)。
  • 不要使用字符串连接生成SQL。请改用参数。 (您的代码容易受到SQL注入攻击:如果您将文本Baba O'Reilly放在文本框中,程序将崩溃。
  • 您应该正确处理所有IDisposable个对象,最好使用Using语句。
  • 运行FxCop(Visual Studio代码分析)作为构建过程的一部分,以捕获其他问题。选择"所有规则"设置。

上述要点可能听起来像是挑剔,但我认为尽早养成良好习惯很重要。雇主最不需要的是一个新员工,他因为从未习惯于正确地做事而增加了重大漏洞。

答案 1 :(得分:0)

我已经接受了您的建议并完全删除了Microsoft Access。我现在在程序中使用自己的记录结构。