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

时间:2012-05-10 08:58:22

标签: vb.net-2010 sqlconnection

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

我的问题是我将Combobox1绑定到BindingSource并且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

我不断收到系统级错误,如下所示 {“不支持关键字:'提供商'。”}

我尝试过其他一些选择,但我得到的错误似乎更加神秘,有人可以帮助我。我会很感激。

3 个答案:

答案 0 :(得分:1)

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 & "'"

答案 1 :(得分:0)

因为您使用Provider来提供不需要它的连接,因为提供程序应该是SQL驱动程序。

我不知道您使用的数据库(嗯,该文件是访问文件),但您需要检查您是否有正确的连接字符串

请参阅http://www.connectionstrings.com/sql-server-2008#p2

答案 2 :(得分:0)

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

首先,您可能希望查看此MSDN帮助,了解如何将数据库连接字符串从代码中移出到配置文件中。这对于您的代码在不同环境(开发框,分段,生产等)中更加无缝地工作尤其重要 - Connection Strings and Configuration Files (ADO.NET)

我还注意到你从未明确打开或关闭连接。每this entry on stack overflow,您应该没问题,但请记住,如果您碰巧更改代码以明确打开连接,您还需要关闭它。

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

最后,您执行以下查询(使用其他答案中的相应mod:

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 & "'"