私の C# asp.net webform には、検索の一部として「使用できる」約 20 の要素を持つ検索ページがあります。後でさらに追加されます。
私が行ったことは、テキストボックスとドロップダウンリストボックスを拡張して、いくつかの変数を含めることです:
fieldname: Tablename.columnname dbtype: DbType.Int32 Joinparam: LEFT Join on otherTable ON xy = ab
これらはすべてビューステートに保存され、再度読み込まれます。これを行う理由は、すべてのコントロールを反復処理して、自分のタイプのすべてのコントロールを引き出すことができるようにするためです。次に、それらを検証して、入力があり、正しい型であることを確認できます。その場合、それらをデータベース アクセス レイヤーに渡し、コードで動的に SQL ステートメントを生成することができます。
これから SELECT ステートメント以外は何も発生させません。選択して返されたフィールドは変更できず、db パラメータを使用して SQL インジェクションを回避しようとしています。
私の心配は、検索条件で使用されるテーブルとフィールド名、および必要な JOINS をすべてビューステートに配置することです。これは本当に悪い考えですか?
DB にこの情報を保持するテーブルにいくつかの int インデックスを作成するだけでこれを曖昧にすることができますが、これはまだビューステートに入れる必要があり、理解するための追加のレイヤーがあることを意味します。
私がこのアプローチを採用した理由は、ステートメントを作成するために DB レイヤーに大量の IF ステートメントを配置する必要がなかったからです。それは地獄のように醜く、維持するのは苦痛です。
これに関するすべてのアドバイスに感謝します。
ジョン
編集
アドバイスをありがとう。ありがたいことに、このアプリは内部のみのものであるため、被害は限定的です。しかし、私はこの手法を二度と使用することはなく、代わりに検索テンプレートのアイデアに取り組みます.
乾杯 :)