0

我不确定为什么会收到此错误。我的问题的描述在代码下方。我在下面的代码中排除了一些 Select Cases 和字段,以使其尽可能短。

 Private Sub SetClassGrid(ByVal ClassCategory As String)
    Dim connectionString As String = WebConfigurationManager.ConnectionStrings("theDataBase").ConnectionString
    Dim con As New SqlConnection(connectionString)
    Dim sqlCommand As StringBuilder = New StringBuilder()

    sqlCommand.Append("SELECT Name, City, State FROM Classes$ WHERE (ClassesCategoryID = ")

    Select Case ClassCategory
        Case "Art"
            sqlCommand.Append("1)")
        Case "Drama"
            sqlCommand.Append("2)")
        Case "Aquarium"
             sqlCommand.Append("2)")         
    End Select

    Dim cmd As String = sqlCommand.ToString()
    Dim da As New SqlDataAdapter(cmd, con)
    Dim ds As New DataSet()

    Try
        con.Open()
        da.Fill(ds, "Classes$")

    Finally
        con.Close()
    End Try

    GridView1.DataSource = ds.Tables("Classes$")
    GridView1.DataBind()


End Sub

对于 Select Case- 当ClassCategory = "Art" 时,它工作正常;但是,当ClassCategory等于其他任何值时,我得到一个错误。

同样对于 Select Case - 如果案例是“艺术”并且如果我将sqlCommand从 =“1)”更改为 =“2)”,它会按预期工作。

所以问题是上面的代码只适用于第一个案例。 在此处输入图像描述

4

2 回答 2

3

调试器显示什么?sqlCommand发生错误时的值是多少?

只是为了确保查询仍然有效,请为您添加默认行为select case

Select Case ClassCategory
    Case "Art"
        sqlCommand.Append("1)")
    Case "Drama"
        sqlCommand.Append("2)")
    Case "Aquarium"
        sqlCommand.Append("2)")
    Case Else
        sqlCommand.Append("-1)")
End Select

更好的是,参数化您的查询:

SqlDataAdapter adapter = new SqlDataAdapter();
SqlCommand command = new SqlCommand("SELECT Name, City, State FROM Classes$ WHERE " + 
                                    "ClassesCategoryID = @Id", connection);

// Add the parameters for the SelectCommand.
command.Parameters.Add("@Id", SqlDbType.Int);

adapter.SelectCommand = command;

并将参数填写在您的select case

Select Case ClassCategory
    Case "Art"
        command.Parameters["@Id"].Value = 1;
    Case "Drama"
        command.Parameters["@Id"].Value = 2;
    Case "Aquarium"
        command.Parameters["@Id"].Value = 2;
    Case Else
        command.Parameters["@Id"].Value = -1;
End Select
于 2013-04-20T22:16:18.520 回答
0

考虑添加中断;? 尝试一步一步,在你的代码执行查询之前,尝试复制查询sql并在服务器中手动执行,看起来查询搞砸了

于 2013-04-20T22:17:14.607 回答