パラメータ化されたクエリをサポートするデータベースクラスを記述する方法
-
03-07-2019 - |
質問
私は元古典的なASPプログラマーであり、時にはPHPプログラマーとして初めてASP.NETアプリケーションを作成します。改善されたADO.NET関数は大好きですが、データベースクラスを記述する必要性を感じています。一部は実際にデータベースとやり取りするコードを統合し、一部は繰り返しのように感じることを減らしたいと考えています。
単純なデータベースクラスは難しくありませんが、セキュリティ対策の1つとしてパラメーター化されたクエリを使用しています。これをクラスに組み込む方法に苦労しています。テーブルと列の名前を渡すことでデータベースの列のデータ型を返す関数を作成しましたが、SQLクエリからテーブルと列の名前を取得する堅牢な方法は考えられません。
クラスの設計では、選択用のQuery()関数と、挿入/更新/削除用のExecute()関数を使用します。 (パブリック関数を増やすことに反対するわけではありませんが、自分より先に進みたくありませんでした。)両方の関数は、パラメーターのSQL文字列とSortedListを受け取ります。 SQL文字列でパラメーター名を見つけ、等号の前を見ると、列名を取得できる場合があります。同様に、クエリが挿入、更新、または削除されたときにテーブル名を取得するのは非常に簡単です。なぜなら、一度に1つのテーブルしか操作できないからです。 1つまたは複数の結合、内部選択などがある可能性があるため、大きな関心事は選択です。
間違った方向に向かっていますか?私が考えていないことで、私の生活が楽になったり難しくなったりする可能性はありますか?誰かがアドバイスを提供できる言語でこのためのクラスを書いた人はいますか?
解決
車輪を再発明しないでください。 nHibernate または LINQToSQL (または LINQToEntities )。
他のヒント
2つ目の呼び出しは、特にこれがaspnetへの最初の進出である場合、あなたのために機能する、試され、テストされたホイールを見つけることです。
SubSonic の提案を追加します。これは、nHibernateよりも少し軽いかもしれませんが、プロジェクトの性質上、どちらも優れたツールであり、どちらも過去数年間で数か月間の作業を節約しました。
これはASP.NETでの最初の経験なので、Linq to SQLを調べることをお勧めします。 いくつかのチュートリアルので、Linqクエリをコーディングしようとする前に、どのように機能するかを理解できます。
あなたのケースでLinq to SQLを使用しないと考えることができる唯一の理由は、SQL Serverを使用していない(または現在または将来他のDBをサポートする必要がある)か、.NET 3.5ランタイムを使用できない場合です何らかの理由で。
幸運
「シンプルなデータベースクラス」のように聞こえます。使用する必要のあるクラスから多くの詳細を隠しています。
SqlCeEngineを含むクラスを記述し、" LookupDescription(String Code)"のようなメソッドを公開しました。 ...そのようなデザインは、あなたが検討すべきものだと思います。そして、LINQを検討することを検討してください。提供するものがたくさんあります。