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 の場合、ケースが「Art」で、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 に答える