如何使用 msaccess 表中筛选的数据填充 vb.net 中的组合框



我真的很感激我能得到的任何帮助。

我的问题是我已将 Combobox1 绑定到绑定源,并且 DataMember 和 ValueMember 属性链接并正常工作。对于我的一生,我不知道如何使用Combobox1的值(选定的值成员(来过滤我在Combobox2上显示的结果。我迫切需要一种简单的方法来做到这一点。

我的失败代码如下

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    Dim conn As New SqlConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Database1.mdb") 'This line fails
    Dim strSQL As String = "SELECT * FROM Questions WHERE Section='" & ComboBox1.ValueMember & "'"
    Dim da As New SqlDataAdapter(strSQL, conn)
    Dim ds As New DataSet
    da.Fill(ds, "Disk")
    With ComboBox2 'Here i try to populate the combobox2
        .DataSource = ds.Tables("Questions")
        .DisplayMember = "Question_String"
        .ValueMember = "Question_Code"
        .SelectedIndex = 0
    End With
End Sub

我不断收到系统级错误,如下所示{"不支持关键字:"提供程序"。"}

我已经尝试了其他一些选择,但我得到的错误似乎更神秘,有人可以帮助我解决这个问题。我会非常感激的。

Dim conn As New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|Database1.mdb'")

此外,您的查询必须使用字符串而不是对象,因此请尝试...

Dim strSQL As String = "SELECT * FROM Questions WHERE Section='" & ComboBox1.ValueMember.toString & "'"

因为您正在将提供程序用于不需要它的连接,因为提供程序应该是 SQL 驱动程序。

我不知道您正在使用什么数据库(好吧,该文件是一个访问文件(,但您需要检查您是否拥有正确的连接字符串

见 http://www.connectionstrings.com/sql-server-2008#p2

以下是一些关于您的代码的观察结果,希望对您有所帮助:

首先,您可能需要查看此 MSDN 帮助,了解如何将数据库连接字符串移出代码并移入配置文件。 这对于代码在不同环境(开发盒、暂存、生产等(中更无缝地工作尤其重要 - 连接字符串和配置文件 (ADO.NET(

我还注意到您从未明确打开或关闭连接。 根据堆栈溢出的此条目,您应该没问题,但请记住,如果您碰巧更改代码以显式打开连接,您还需要关闭它。

我还注意到您没有使用参数化查询。 这使您的代码容易受到 SQL 注入攻击。 这是Scott Guthrie的博客文章"提示/技巧:防范SQL注入攻击"的链接。 你永远不知道谁可能会用这种不好的做法复制和粘贴你的代码块。

最后,您执行以下查询(使用来自其他答案的适当模组:

Dim strSQL As String = "SELECT * FROM Questions WHERE Section='" & ComboBox1.ValueMember.toString & "'"

随后仅在代码中使用Question_String和Question_Code。 您可能需要考虑将查询更改为仅拉取所需的列。 当您的表包含许多列时,这尤其有用。 否则,您将不必要地提取代码从未实际需要的数据。 因此,您的查询将变为:

   Dim strSQL As String = "SELECT Question_String, Question_Code FROM Questions WHERE Section='" & ComboBox1.ValueMember.toString & "'"

相关内容

  • 没有找到相关文章

最新更新