0

私は Visual Basic で作業しており、OleDb を使用して Excel スプレッドシートにアクセスしています。シートから DataGridView にデータをインポートしていますが、うまくいきますが、今はフィルタリングに取り組んでいます。ほとんどの場合、うまく機能しますが、パラメーター ("@p1" など) を使用しようとすると、非常に奇妙な問題が発生します。

私は次のものを持つことができます(前、間、後の一連の無関係なものを除く)

query = query & "Project" & " LIKE @Gah1"
...
MyCommand.SelectCommand.Parameters.AddWithValue("@Gah1", "%House%")

探している結果が得られます。しかし、たとえば、列自体の名前のパラメーターを取得できないようです

query = query & "@Gah1" & " LIKE @Gah2"
...
MyCommand.SelectCommand.Parameters.AddWithValue("@Gah1", "Project")
MyCommand.SelectCommand.Parameters.AddWithValue("@Gah2", "%House%")

動作しません(そして、プロジェクトをさまざまなブラケットやさまざまな方法で囲んでみましたが、動作しません)。パラメータの使用例はたくさんありますが、それらを使用して列名を付ける例はありません。

文字列リテラルの周りに「 」を付ける必要がないため、パラメーターによって文字列の表現方法が変わると思います。パラメータで列名を指定することはできませんか? もしできるなら、私は何をする必要がありますか?


コメントを投稿させてくれないので、ここで

a) おっと、いいえ、そうではないと思います b) ここでテスト クエリで送信する文字列クエリは次のとおりです。

"select * from [Bid Summary$] where @Gah1 LIKE @Gah2"

絶対に必要な場合は手順を投稿できますが、 @Gah1 を Project または [Project] に置き換えると全体が完全に正常に機能するため、問題ではありません。変更した行を示しただけです。私はパラメータ化されたクエリに非常に慣れていません。クエリ文字列を使用しないようにする方法を説明できますか? 私がやっていることを行うためのより良い方法があれば、喜んでそれを使用します=)そして、応答と編集に感謝します

4

1 に答える 1

0

次のように、文字列メソッドとパラメーターを組み合わせて使用​​します。

//replace field name in a query template
query = String.Format("select * from [Bid Summary$] where {0} LIKE ?", "@Gah1");

//set value (name is in OleDb parameter ignored, so it could be null)
MyCommand.SelectCommand.Parameters.AddWithValue(null, "%House%");

注: sql インジェクションの可能性があるため、フィールド名の由来 (ユーザー入力ではありません) を確認してください。

于 2014-05-27T08:01:12.617 に答える