2012-04-25 17 views
4

多くのパラメータを持つinsert文を書くためのエレガントな方法はありますか? DBに保存する必要がある20個のフラグの他に、20個のフラグと共に挿入する必要があるその他の情報もあります。その挿入物のための30のパラメータを持つメソッドを書くのは時間の無駄ですが、今まで私はうまくいかないかもしれない他のアイデアを考え出していません。多くのパラメータを持つC#sqlの挿入

+1

あるそれは「時間の無駄」とは?それは醜いデザインの選択かもしれないが、私はそれがどのように時間を無駄にしているのか分からない。 –

+0

私はあなたがORMを探していると思います。私は可能ならばこれを選ぶだろう。 –

+1

"フラグ"と言うと、おそらく '[Flags] enum MyFlags {...}'で表現できる実装を意味しますか?そうであれば、1つの変数でこれらの20個のフラグを簡単に表現できます。 –

答えて

6

これらのパラメータをすべてオブジェクトに配置し、そのオブジェクトをメソッドに渡すことができます。

3

エンティティを表すクラスを作成し、そのクラスのインスタンスを渡すのが標準的な方法です。

これにより、検証、プレゼンテーションなど、永続性を持つ可能性のある他のメソッドに簡単に渡すことができます。

+0

なぜdownvote? – RedFilter

1

は、SQLクエリのさらなる処理のためdatalayerにインスタンスを渡し、サチンに同意しますがクラス内に必要SqlParametersのリストをカプセル化し、

1

getFieldsなどのメソッドを公開するIinsertableなど、データベースに挿入できるオブジェクトのタイプを表すInterfaceを作成できます。これで、このインタフェースを実装するエンティティを作成します。

これらのエンティティでは、IFCertableをパラメータとして受け入れるジェネリックメソッドを作成できます。このメソッドは、ループ内でgetFielsメソッドを使用して挿入されるすべてのフィールドを照会します。これにより、エンティティのあらゆる種類のコードを再利用できるようになり、地獄のようにきれいになります。

0

私のSqlBuilderクラスを使用します。パラメータの作成や呼び出されたことについて心配することなく、パラメータ付きクエリを書くことができます。

var bldr = new SqlBuilder(myCommand); 
bldr.Append("SELECT * FROM CUSTOMERS WHERE ID = ").Value(myId, SqlDbType.Int); 
//or 
bldr.Append("SELECT * FROM CUSTOMERS NAME LIKE ").FuzzyValue(myName, SqlDbType.NVarChar); 

あなたが好きなだけのフラグを持つことができます。ランタイム値をクエリに含めるたびに、Value()を呼び出してください。パラメータの作成は隠されていて、きれいなSQLクエリが残っています。

SqlBuilderクラスのコードがどのようにhere

関連する問題