我不确定为什么会收到此错误。我的问题描述在代码下面。我已经排除了以下代码中的一些选择案例和字段,以使其尽可能短。
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。
![在此输入图片说明] [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并手动在服务器中执行它,看起来查询搞砸了