Vb.net net数据库查询和复选框,正确的方法怎么办?

Vb.net net数据库查询和复选框,正确的方法怎么办?,vb.net,Vb.net,我是Vb.net和Sql Server的新手,不要太苛刻。谁能检查一下我的代码,我觉得这样做是不对的。其目的是仅当单击复选框并显示该查询时才显示查询。 多谢各位 Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click CheckValue = 0 'set to value 0 'check if any checkbox is checked. Fo

我是Vb.net和Sql Server的新手,不要太苛刻。谁能检查一下我的代码,我觉得这样做是不对的。其目的是仅当单击复选框并显示该查询时才显示查询。 多谢各位

 Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click

    CheckValue = 0 'set to value 0 
    'check if any checkbox is checked.
    For Each C As Control In Me.Controls
        If C.GetType Is GetType(CheckBox) Then
            Dim cb As CheckBox = DirectCast(C, CheckBox)
            If cb.Checked Then
                CheckValue = CheckValue + 1 'only works if value is above 1
            End If
        End If
    Next


    If CheckValue <> 0 Then   'only if check box is checked then rest will run

        Try
            If chkboxId.Checked = True Then 'assign value to checkbox
                chkboxIdstr = "userid"
            Else
                chkboxIdstr = ""
            End If

            If chkboxName.Checked = True Then
                chkboxNamestr = "username"
            Else
                chkboxNamestr = ""
            End If

            'to insert comma, only if both are true.
            If chkboxId.Checked = True And chkboxName.Checked = True Then
                SQLcomma = " , "
            Else
                SQLcomma = ""
            End If

            'so if both are checked we get a comma
            SQL2 = chkboxIdstr + " " + SQLcomma + " " + chkboxNamestr
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Try 'sql connect and display
            sqlCon.Open()
            SQL = "SELECT " + SQL2 + " FROM user_info"

            Dim dadapter As New SqlDataAdapter(SQL, sqlCon)
            Dim dset As New DataSet
            sqlCon.Close()
            dadapter.Fill(dset)
            'fill datagrid
            dgv.DataSource = dset.Tables(0)

        Catch ex As Exception
            MsgBox(ex.Message)
            sqlCon.Close()
        End Try
    Else
        MsgBox("Plesase do check any box to filter ")
        Exit Sub

    End If
End Sub
-
我通过小型应用程序跟踪和出错来学习,主要是通过谷歌搜索解决方案。

我认为您不需要所有这些代码。只需逐个测试您的复选框,并以增量方式构建要添加到SELECT查询中的列列表

Dim selectColumns As String
Try

    If chkboxId.Checked = True Then 
        selectColumns = "userid,"
    End If

    If chkboxName.Checked = True Then
        selectColumns &= "username,"
    End If

    ' Other columns???? follow the same pattern

    ' If we have something in selectColumns then we could execute the query
    ' but before we trim away the last comma
    If selectColumns.Length > 0 Then 
       selectColumns = selectColumn.TrimEnd(",")

       sqlCon.Open()
       SQL = "SELECT " & selectColumns & " FROM user_info"
       .....
    Else
       ' no data in selectColumns? Message for you user
       MsgBox("Plesase do check any box to filter ")
       Exit Sub
    End If    
Catch ex As Exception
    MsgBox(ex.Message)
    sqlCon.Close()
End Try
试试这个:

Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click

    If chkboxId.Checked OrElse chkboxName.Checked Then
        SQL2 = String.Empty
        If chkboxId.Checked Then
            SQL2 = SQL2 + "userid"
        EndIf

        If chkboxId.Checked AndAlso chkboxName.Checked Then
            SQL2 = SQL2 + " , "
        End If

        If chkboxName.Checked Then
            SQL2 = SQL2 + "username"
        End If

        Try 'sql connect and display
            sqlCon.Open()
            SQL = "SELECT " + SQL2 + " FROM user_info"

            Dim dset As New DataSet
            Using dadapter As New SqlDataAdapter(SQL, sqlCon)
                dadapter.Fill(dset)
            End Using

            'fill datagrid
            dgv.DataSource = dset.Tables(0)

          Catch ex As Exception
             MsgBox(ex.Message)
          Finally
             sqlCon.Close()
          End Try
    Else
        MsgBox("Please do check any box to filter ")
    End If

End Sub

如果您使用的是SqlDataAdapter,您不需要打开连接,因为它自己就可以完成,这只是一个问题。如果必须向Select语句传递值,您会怎么做?假设您必须选择一行,其中userid为45。你怎么通过45级考试?马努超。我不知道。我会查一查的。好吧,我就为了这个案子告诉你,因为你无法避免:。从user\u info中选择userid,其中userid=@value user\u infodadapter.SelectCommand.Parameters。AddWithValue@value,谢谢你。但我会试试的。谢谢。没有将错误对象引用设置为对象的实例。在为selectColumns赋予价值后,一切正常。史蒂夫,非常感谢你。在业余时间学习编程。