2

次のコードがあります。

Using conn = New SqlConnection(connStr)
        Dim sql = "SELECT [CATEGORIA], [AREA] FROM [CATEGORIAS] WHERE ([AREA] = @AREA)"
        Dim sqlCmd = New SqlCommand(sql, conn)
        sqlCmd.Parameters.AddWithValue("@AREA", CStr(PublicLogin.Area))

        conn.Open()
        Dim ds As New DataSet
        Dim da As New SqlDataAdapter(sql, conn)
        da.Fill(ds, "CATEGORIAS")

        With cboCat
            .DataSource = ds.Tables("CATEGORIAS")
            .DisplayMember = "CATEGORIAS_AREA"
            .ValueMember = "CATEGORIAS_AREA"
            .SelectedIndex = 0
        End With

    End Using

理論的には、コンボボックスを埋める必要がありますか? そうではありません。エラーなどは発生しません。コンボボックスは空のままです。クエリがうまく機能していて、正しい情報を取得していると確信していますが、コンボボックスがいっぱいになりません。where クエリを実行すると、CB に「System.Data.Row...」が入力されます。

更新: 誰かがそれを必要とする場合の作業コード。

        Using conn = New SqlConnection(connStr)
        Dim sql = "SELECT [CATEGORIA], [AREA] FROM [CATEGORIAS] WHERE ([AREA] = @AREA)"
        Dim sqlCmd = New SqlCommand(sql, conn)
        sqlCmd.Parameters.AddWithValue("@AREA", CStr(PublicLogin.Area))

        conn.Open()
        Dim ds As New DataSet
        Dim da As New SqlDataAdapter(sqlCmd)
        da.Fill(ds, "CATEGORIAS")

        With cboCat
            .DataSource = ds.Tables("CATEGORIAS")
            .DisplayMember = "CATEGORIA"
            .ValueMember = "CATEGORIA"
            .SelectedIndex = 0
        End With

    End Using
4

2 に答える 2

2

おそらくクエリが何も返さないため、空です。変数の最終クエリにパラメーターを追加していないことに注意してくださいsql

クエリとパラメーターを使用してコマンドを作成しますが、それを使用することはないため、すべての値を選択してWHERE ([AREA] = @AREA)も何も返されません。

これを試して:

Dim da As New SqlDataAdapter(sqlCmd)
于 2013-06-11T15:47:34.457 に答える
2

これは私には奇妙に見えます:

.DisplayMember = "CATEGORIAS_AREA"
.ValueMember = "CATEGORIAS_AREA"

おそらく次のようになります。

.DisplayMember = "CATEGORIA"
.ValueMember = "AREA"

DisplayMember の MSDNから:

コンボ ボックスに表示する文字列を取得するプロパティまたは列を指定する文字列を取得または設定します。

編集:これも置き換える必要があります:

Dim da As New SqlDataAdapter(sql, conn)

これで:

Dim da As New SqlDataAdapter(sqlCmd)

それ以外の場合、パラメーターは使用されません。

于 2013-06-11T15:40:48.127 に答える