首页 > 解决方案 > 使用带有组合框的 Vb.net 显示数据库中的数据

问题描述

我在我的语法中遇到一个错误,该错误指示在AND运算符附近

If ComboBox1.Text = "" And ComboBox2.Text = "" Then
    MsgBox("Please Fill In The Details")
Else
    Try
        con.Open()
        Select Case ComboBox1.Text
            Case "Students Info"
                Dim a = "SELECT * FROM studentdb1 WHERE class = " & ComboBox2.SelectedText & " AND WHERE date_registered BETWEEN " & date1.Text & " AND " & date2.Text & ""
                displayTable(a)
        End Select

        con.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End If

我创建了一个类displayTable,使用通过参数传递的命令显示到 datagridview

Public Sub displayTable(x As String)
    Dim command2 As New SqlClient.SqlCommand
    command2 = con.CreateCommand
    command2.CommandText = x
    command2.ExecuteNonQuery()

    Dim dt As New DataTable
    Dim da As New SqlDataAdapter(command2)
    da.Fill(dt)
    datagrid1.DataSource = dt
End Sub

标签: sqlvb.net

解决方案


正如 Vijay 在评论中提到的:

删除“WHERE”(AND WHERE date_registered BETWEEN)后跟 AND

但我还有一些其他的事情要指出:

  1. command2.ExecuteNonQuery()只会给你受影响的行数。你不需要它。
  2. 尝试使用CommandParameters(您可能需要重新设计代码)
    Dim sqlString = "SELECT * FROM studentdb1 WHERE class = @Class AND date_registered BETWEEN @StartDate AND @EndDate"
    Dim command2 As New SqlClient.SqlCommand
    command2 = con.CreateCommand
    command2.CommandText = sqlString
    command2.Parameters.Add("@Class", SqlDbType.VarChar).Value = ComboBox2.SelectedText
    command2.Parameters.Add("@StartDate", SqlDbType.Date).Value = date1.Text
    command2.Parameters.Add("@EndDate", SqlDbType.Date).Value = date2.Text

推荐阅读