0

クエリ文字列に基づいて SQLDataAdapter のクエリを動的に変更しようとしています。パラメータとして渡そうとしましたが、うまくいきません。他の提案はありますか?

今私は持っています:

    Dim conn As Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection(WebConfigurationManager.ConnectionStrings("MyConnection").ToString())

    Dim ad As New SqlDataAdapter
    Dim selectSQL As String = "SELECT BookTitle, Publisher,  Location, CallNumber, [Extra_Description] AS Description, [ISBN] FROM [New_Book_Table] WHERE [Export_to_list]='True' AND [@Category]='True'"
    Dim selectCMD As SqlCommand = New SqlCommand(selectSQL, conn)
    ad.SelectCommand = selectCMD
    selectCMD.Parameters.Add("@Category", SqlDbType.NVarChar, 30).Value = getCategoryString()
    Dim ds As New DataSet

    ad.Fill(ds)
    ListView1.DataSource = ds
    ListView1.DataBind()

しかし、エラーが発生します:System.Data.SqlClient.SqlException: Invalid column name '@Category'.

これはこれを行う正しい方法ではないからだと思います。これどうやってするの?クエリ文字列を介して列名を取得できます。その列名をクエリに渡して、列として認識させたいです。

4

1 に答える 1

0

最初の SelectSQL は単なる文字列であるため、動的にパラメーターを追加するよりもはるかに簡単な方法です。次の関数を使用してその文字列を動的に構築しました。

Protected Function getSQLQuery() As String
    Dim baseQuery As String = "SELECT BookTitle, Publisher,  Location, CallNumber, [Extra_Description] AS Description, [ISBN] FROM [New_Book_Table] WHERE [Export_to_list]='True'"
    Dim category As String = getCategoryString()
    Return baseQuery & "AND [" & category & "]='True'"
End Function
于 2011-02-15T19:02:56.157 に答える