在vb.net中使用多个复选框为SQL语句构建字符串

时间:2016-03-14 18:18:35

标签: sql vb.net string if-statement

我目前正在使用SQL后端和vb.net Windows Forms前端。我试图根据用户将选择的复选框列表从SQL中提取报告。

为此,我将在SQL中使用IN子句。唯一的问题是如果我在vb.net中使用if语句来构建字符串,那么它将成为设置字符串的大量代码。

我希望有人知道更好的方法来做到这一点。下面的代码示例仅显示选择第1行并同时选择第1行和第2行。我将需要代码才能选择任何分类的行。该字符串必须是行号,并在数字后面加逗号。这种方式,当我在我的SQL查询中包含代码时,它不会出错。

以下是代码:

Dim LineString As String
    'String set up for line pull
    If CBLine1.Checked = False And CBLine2.Checked = False And CBLine3.Checked = False And CBLine4.Checked = False And _
         CBLine7.Checked = False And CBLine8.Checked = False And CBLine10.Checked = False And CBLine11.Checked = False And CBLine12.Checked = False Then
        MsgBox("No lines selected for download, please select lines for report.")
        Exit Sub
    End If

    If CBLine1.Checked = True And CBLine2.Checked = False And CBLine3.Checked = False And CBLine4.Checked = False And _
        CBLine7.Checked = False And CBLine8.Checked = False And CBLine10.Checked = False And CBLine11.Checked = False And CBLine12.Checked = False Then
        MsgBox("This will save the string as only line 1")

    ElseIf CBLine1.Checked = True And CBLine2.Checked = True And CBLine3.Checked = False And CBLine4.Checked = False And _
    CBLine7.Checked = False And CBLine8.Checked = False And CBLine10.Checked = False And CBLine11.Checked = False And CBLine12.Checked = False Then
        MsgBox("This will save the string as only line 1 and 2")
    End If

必须将最终字符串插入到如下所示的SQL语句中:

SELECT * 
FROM tabl1 
WHERE LineNumber IN (-vb.netString-)

上面的代码需要为字符串添加逗号。

3 个答案:

答案 0 :(得分:1)

首先,您需要设置所有复选框,并将Tag属性设置为它们引用的行号。因此,例如,CBLine1复选框将其属性Tag设置为值1(依此类推所有其他复选框)。

这可以使用WinForm设计器轻松完成,或者,如果您愿意,可以在运行时在Form load事件中完成。

下一步是检索所有选中的复选框并提取Tag属性以构建所需的行列表。这可以使用一些Linq

来完成
Dim linesSelected = new List(Of String)()
For Each chk in Me.Controls.OfType(Of CheckBox)().
                   Where(Function(c) c.Checked)
   linesSelected.Add(chk.Tag.ToString())
Next

现在您可以开始验证输入

if linesSelected.Count = 0 Then
   MessageBox.Show("No lines selected for download, please select lines for report.")
Else If linesSelected.Count = 1 Then
   MessageBox.Show("This will save the string only for line " & linesSelected(0))
Else
   Dim allLines = string.Join(",", linesSelected)
   MessageBox.Show("This will save the string for lins " & allLines)
End If

当然,List(Of String)和string.Join方法非常适合为您的查询构建IN子句

答案 1 :(得分:0)

我觉得我只有一半得到你的问题,但我希望这会有所帮助。在VB.net中,我们显示状态为启用或禁用的表单列表。

复选框在选中时仅显示已启用的表单。

SELECT * FROM forms WHERE (Status = 'Enabled' or @checkbox = 0)

查询实际上有一个更长的where子句,它以相同的方式处理下拉选项。这应该可以帮助您将后端VB传递给简单的SQL语句。

答案 2 :(得分:-1)

If checkboxes 3...10 = false then
    If checkbox 1 = true then
        If checkbox 2 is true then
            A
        Else if checkbox 2 = false then
            B
        End if
Else
    C
End if