是什么导致此System.Data.SqlClient.SqlException错误。我的SqlDataAdapter问题

时间:2013-04-20 22:10:32

标签: sql sql-server vb.net sql-server-2008 sqldataadapter

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

 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 等于其他任何东西时,我收到一个错误。

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

所以问题是上面的代码只适用于第一个Case。 enter image description here

![在此输入图片说明] [2]

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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