0

助けていただければ幸いです。

私の問題は、Combobox1がBindingSourceにバインドされており、DataMemberプロパティとValueMemberプロパティがリンクされて機能していることです。私の人生では、Combobox1の値(選択されたvaluemember)を使用して、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

次のようにシステムレベルのエラーが発生し続けます{"キーワードはサポートされていません:'プロバイダー'。"}

私は他のいくつかのオプションを試しましたが、私が得るエラーはもっと不可解なようです誰かがこれについて私を助けてくれますか?とても感謝しています。

4

3 に答える 3

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

于 2012-05-21T18:02:23.687 に答える
0

プロバイダーは SQL ドライバーである必要があるため、プロバイダーを必要としない接続にプロバイダーを使用しているためです。

使用しているデータベースはわかりませんが (ファイルはアクセス ファイルです)、接続文字列が正しいことを確認する必要があります。

http://www.connectionstrings.com/sql-server-2008#p2を参照してください

于 2012-05-10T15:38:15.037 に答える
0

あなたのコードについて、参考になることを願っています。

まず、データベース接続文字列をコードから構成ファイルに移動する方法について、この MSDN ヘルプを参照することをお勧めします。これは、コードがさまざまな環境 (開発ボックス、ステージング、運用など) でシームレスに機能するために特に重要です -接続文字列と構成ファイル (ADO.NET)

また、接続を明示的に開いたり閉じたりすることは決してないことに気付きました。スタックオーバーフローに関するこのエントリによると、問題はありませんが、接続を明示的に開くようにコードを変更した場合は、接続を閉じる必要があることに注意してください。

また、パラメーター化されたクエリを使用していないことにも気付きました。これにより、コードが SQL インジェクション攻撃に対して脆弱になります。 ここに、Scott Guthrie によるブログ投稿「Tip/Trick: Guard Against SQL Injection Attacks」へのリンクがあります。誰があなたのコード ブロックをコピーして、この悪い習慣で貼り付けるかはわかりません。

最後に、次のクエリを実行します (他の回答からの適切な 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 & "'"
于 2012-05-22T15:18:52.440 に答える