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 查询,它会用“System.Data.Row ...”填充 CB

更新:工作代码以防有人需要;

        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

这对我来说看起来很奇怪:

.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 回答
2

它是空的,因为查询可能没有返回任何内容。请注意,您没有将参数添加到sql变量的最终查询中。

您使用查询和参数创建了一个命令,但您从不使用它,因此当您选择所有值时WHERE ([AREA] = @AREA),它什么也不返回。

尝试这个:

Dim da As New SqlDataAdapter(sqlCmd)
于 2013-06-11T15:47:34.457 回答