3

SQL テーブルのデータを更新/挿入するには、ストアド プロシージャのみを使用する必要があります。

150 列を更新するストアド プロシージャを作成できますが、そのためには、オブジェクトから 150 列すべての値を取得し、150 列すべてを明示的にストアド プロシージャに渡す必要があります。

150個すべての値を明示的に渡す必要がない方法を誰か提案してもらえますか?

4

8 に答える 8

6

ここでの他の回答は、目標を達成するための別の方法を示しています。ただし、いくつかの理由から、それらを使用しないように注意してください。

  1. ほとんどはすべて脆いです。つまり、コンパイル時に表示されない潜在的な問題があり、多くの場合、すべてのエッジ ケースが適切にテストされない限り表示されません。

  2. ほとんどの場合、同じかそれ以上のコードになります。メインテーブルに更新/挿入する前に、文字列を解析したり、xml ファイルを一時テーブルに変換したりする必要があるため、コードを節約することはできません。

  3. 非標準的な方法は、このプロジェクトの次のプログラマーが、C# コードの数行を節約する以外の理由で、この手順が他の手順とは異なる動作をするという事実に注意を払う必要があることを意味します。

ポイントは、ストアド プロシージャを通常の方法で作成し、通常の方法で呼び出すことです。ほとんどの問題は、コンパイル時または限られたテスト ケースで発生します。さらに、他のコードと同じフォーマットを維持することで、多くの余分な作業をせずに将来の変更が成功する可能性が高まります。

于 2013-05-13T17:51:11.037 に答える
0

Dapperをご覧ください。

これは「マイクロ ORM」であり、オブジェクト プロパティから DbCommands パラメータにコピーする多くのボイラープレート コードを処理できます。より大きな ORM の一部が肥大化することはありません。

于 2013-05-14T02:58:02.210 に答える
0

返信ありがとうございます。エンティティ フレームワーク 4 を使用しているので、Mapped the Stored proc を使用しました。エンティティ フレームワークを使用して、`public virtual ObjectResult> UpdateCaseFormID(Nullable id, string formId, Nullable usersId, string formDataSource, ....) のようなメソッドを作成しました。{

        ObjectParameter idParameter;

        if (id.HasValue)
        {
            idParameter = new ObjectParameter("Id", id);
        }`

そして、オブジェクトを使用して、すべての値を明示的に上記のメソッドに渡しました

于 2013-05-15T21:22:22.423 に答える
-1

そのような場合、値を渡すために配列(または複合変数)を使用したいと思います。ただし、この配列型が 150 列すべてのデータ型の値を保持するように注意する必要があります。これらの150列のデータ型の中にマスターデータ型の配列が必要であることを意味します。

良い 。この場合、array または varchar2 を使用できます。

于 2013-05-13T17:23:59.360 に答える