1

ストアド プロシージャのみを介してデータベースとやり取りする ac# アプリケーションがあります。ストアド プロシージャを呼び出すためのさまざまな手法を試しました。ルートには SqlCommand クラスがありますが、いくつかのことを達成したいと考えています。

  • c# と sql の間のインターフェースをよりスムーズにして、プロシージャー呼び出しが c# 関数呼び出しのように見えるようにする
  • 特定のストアド プロシージャがコード内のどこかで呼び出されているかどうかを判断する簡単な方法があります。
  • プロシージャ コールの作成を迅速かつ簡単にします。

さまざまな道を模索してきました。1 つには、名前空間構造がストアド プロシージャの名前構造を反映するプロジェクトがありました。そのようにして、クラスの名前からストアド プロシージャの名前を生成し、特定のストアド プロシージャが使用されているかどうかを知ることができました。名前空間ツリーでそれを細かくすることによって。他にどんな経験がありますか?

4

7 に答える 7

5

LINQ to SQLを試す必要があります。

于 2008-10-02T21:04:03.153 に答える
4

ストアド プロシージャがデータベースへのインターフェイスである場合、問題のドメインを反映するクラスにそれらをラップする傾向があります。そのため、ほとんどのアプリケーション コードはこれらのオブジェクトを使用し、ストアド プロシージャを呼び出さず、ストアド プロシージャまたはデータベース接続。アプリケーションオブジェクトは、通常、それらの間で再生されます。

通常、リレーショナル モデルはアプリケーション ドメイン オブジェクト モデルと 1 対 1 ではないため、アプリケーションで SP をミラーリングするのは間違いだと思います。

たとえば、通常、リンク テーブルやその他のデータベース設計および正規化の成果物を表すアプリケーション オブジェクトはありません。これらは、他のオブジェクトに含まれているか、他のオブジェクトによって返されるオブジェクトのコレクションです。

多くはインピーダンスのミスマッチでできていますが、それはコースの馬だと思います。データベースに得意なことをさせ、オブジェクト指向モデルに得意なことをさせてください。

于 2008-10-02T21:10:10.937 に答える
3

MSのエンタープライズライブラリの使用を検討しましたか?これにより、ストアドプロシージャを簡単に呼び出すことができます。私は通常、これらのストアドプロシージャを呼び出すためだけのデータベースごとにクラスを設定します。次に、これに似たものを作成できます(申し訳ありませんが、c#ではなくvb.netです)。

Public Shared Function GetOrg(ByVal OrgID As Integer) As System.Data.DataSet
    Return db.ExecuteDataSet("dbo.cp_GetOrg", OrgID)
End Function

dbは次のように定義されます。

Dim db As Microsoft.Practices.EnterpriseLibrary.Data.Database = DatabaseFactory.CreateDatabase()

次に、ストアドプロシージャを呼び出すために使用されるこの1つの関数があります。次に、この1つの関数のコードを検索できます。

于 2008-10-02T21:12:34.300 に答える
1

現在の製品を構築するとき、私が非常に実装したいと思っていたツールの 1 つは、データベース クラス (DatabaseFactory のようなものですが、私は気にしませんでした) でした。そのクラス内で、次のような関数から sproc へのマッピングを使用して、ストアド プロシージャを真の C# 関数として呼び出せるようにしたいと考えました。

public int Call_MySproc(int paramOne, bool paramTwo, ref int outputParam)

{

...パラメータ処理と sproc 呼び出しはこちら

}

ただし、これを実行しようとするときに直面する最大の問題は、sproc 呼び出しを実装する C# 関数を作成するために必要な作業にあります。さいわい、T-SQL でこれを行うためのコード ジェネレーターを作成するのは簡単です。最初に Paul McKenzie によって作成されたものから始め、それをさまざまな方法で変更して、必要に応じて C# コードを生成しました。

Paul McKenzie を Google で検索して彼の元のコード ジェネレーターを探すか、mark -at- BSDIWeb.com 宛てにメールをお送りいただければ、私の SQL クラス ライブラリと関連する sproc コードのソースをまとめます。ジェネレーターをダウンロードして、当社の Web サイトに配置します。リクエストが 1 つか 2 つあれば、それを投稿し、戻ってきてこのレスポンスを編集して、他の人にもソースを示すようにします。

于 2008-10-02T21:45:33.863 に答える
0

あなたが望むもののための最も簡単な解決策[そして私はそれが他の解決策より良いか悪いかを言っているわけではありません]はデータセットを作成し、サーバーエクスプローラーからデータセットデザイナーの表面にストアドプロシージャをドラッグすることです。これにより、アダプター内にメソッドが作成され、呼び出して参照を確認できます。

于 2008-10-02T21:24:22.417 に答える
0

流行りではありませんが、すべてのストアド プロシージャのフロントエンドとしてTyped DataSetを使用します。

于 2008-10-02T21:56:41.387 に答える
0

Microsoft の新しい Entity Framework は、まさにあなたが求めているものを提供します。通常、EF はデータベース オブジェクトのプロキシ クラスを作成するために使用されますが、多くの人が気付いていないことの 1 つは、EF がストアド プロシージャのプロキシ メソッドも作成することです (もちろん、自動生成されます)。これにより、SP を通常のメソッド呼び出しと同じように使用できます。

見てみな!

于 2008-10-03T01:20:35.017 に答える