声明: この記事は、「Computer Applications」第 23 巻、第 11 号に掲載されています。
要約: さまざまなシステムの開発において、ストアド プロシージャを使用することは良い習慣です。これにより、一時テーブル、関数、カーソルなどの機能がもたらされるだけでなく、デバッグ、アップグレード、メンテナンスが便利になります。ただし、ほとんどすべてのストアド プロシージャ呼び出しは同じモードであり、主な違いは各ストアド プロシージャのパラメータが異なることです。では、すべてのストアド プロシージャ呼び出しを統合し、不要なプログラミングを減らす方法を使用することは可能でしょうか? SQL Server データベースと ASP.NET の研究に基づいて、このメソッドは呼び出すストアド プロシージャの名前を指定し、呼び出し時に特定のパラメータ値を指定するだけで済むように、統合された呼び出しメソッドを実装しました。プロシージャを呼び出すことができます。
キーワード:ストアドプロシージャ、システムテーブル、情報構造ビュー、ADO.NET 文書識別コード:②技術実践成果報告書(技術)、理論学習と社会実践のまとめ(社会科学)
.NET で同じ方法でストアド プロシージャを呼び出す
要約: ストアド プロシージャを使用することは、プロジェクトの開発において良い習慣です。ストアド プロシージャを使用すると、一時テーブル、関数、カーソルが提供され、デバッグ、アップグレード、メンテナンスにもメリットが得られます。ただし、ストアド プロシージャの呼び出しはほとんどすべて同じパターンです。それらの違いは、すべてのストアド プロシージャのパラメータです。では、違いにもかかわらず、同じ方法でストアド プロシージャを呼び出して、プログラミング コードを減らすことができるでしょうか。提供された情報は、SQL Server と .NET のみです。ストアド プロシージャ名とそのパラメータの値を指定する場合、パラメータを自分で作成する必要はありません。 キーワード: Stord プロシージャ、システム テーブル、情報スキーマ、ADO.NET
概要: プロジェクトの開発では、ストアド プロシージャ。ただし、ほとんどすべてのストアド プロシージャ呼び出しは同じパターンになります。主な違いは、作成される各パラメータの型と値にあります。では、1 つの関数 (またはクラス) を通じてすべてのストアド プロシージャを呼び出すことは可能でしょうか?この記事では、データベースによって提供されるシステム テーブルを使用するという原則に基づいて統合呼び出しメソッドを実装します。このメソッドでは、呼び出すストアド プロシージャの名前を指定し、呼び出し時に特定のパラメーター値を指定するだけで済みます。ストアド プロシージャを呼び出すことができます。
要約: プロジェクトの開発中にデータベース システムのストアド プロシージャを呼び出す必要がありますが、ストアド プロシージャの呼び出しはほとんど同じであり、主な違いはパラメータの型や値などの違いです。関数 (またはクラス) ですか? データベース システムによって提供されるシステム テーブルに基づいて、ストアド プロシージャを呼び出すためのクラスを作成しました。ストアド プロシージャを呼び出すために指定するのは、ストアド プロシージャの名前と名前だけです。ストアド プロシージャのすべてのパラメータの値。
private void GetProcedureParameter(params object[]parameters)
{ SqlCommand myCommand2 = new SqlCommand();
myCommand2.Connection = this.myConnection;
myCommand2.CommandText = "select * from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME = '" + this.ProcedureName + "' order by ORDINAL_POSITION";
SqlDataReader Reader = null; Reader = myCommand2.ExecuteReader(); // 戻りパラメータを作成
myParameter = new SqlParameter();
myParameter.ParameterName = "@Value";
myParameter . SqlDbType = SqlDbType.Int;
myParameter.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(myParameter);
// ここで、SqlParameter の型、値、方向などの属性を自動的に作成します。
while(reader.Read())
{
myParameter = new SqlParameter();
myParameter.ParameterName = Reader["PARAMETER_NAME"].ToString();
myParameter.Direction = Reader["PARAMETER_MODE"].ToString()=="IN" ?ParameterDirection.Input:ParameterDirection.Output;
switch(reader["DATA_TYPE"].ToString()) {
case "int" :
if(myParameter.Direction == ParameterDirection.Input)
myParameter.Value = (int)parameters[i] ;
myParameter.SqlDbType = SqlDbType.Int
;
//
...
多くの特定の型の処理は省略され
ます
。
3.2 返される結果データ セット、戻り値、および送信パラメータ セット ストアド プロシージャのパラメータを作成した後、ストアド プロシージャを呼び出すことができます。 .NET では、結果セットを返す一般的に使用されるクラスは SqlDataReader と DataSet であり、SqlDataReader は接続を維持している間のみ使用できますが、DataSet は使用できません。私たちの実装では、呼び出し後に接続を切断する必要があるため、返された結果セットを保存するために DataSet が使用されます。
public SqlResult Call(params object[]parameters){ // SqlResult は、結果データ セット、戻り値、送信パラメータ セットを保存するために使用される自己定義クラスです。 SqlResult result = new SqlResult(); // 独自の接続を定義します。必要な String
myConnection = new SqlConnection(ConnectionString);
myCommand =new
SqlCommand(this.ProcedureName, myConnection);
myCommand.CommandType = CommandType.StoredProcedure
; // 取得および作成プロシージャのパラメータを保存し、値を設定します
。 GetProcedureParameter(parameters)
; // ストアド プロシージャの送信パラメータ値と名前のペアを取得し、ハッシュテーブルに保存します。 GetOutputValue(result) ; // ここでさまざまなリソースを解放し、
myCommand.Dispose
()
; myConnection.Dispose
()
;
4.今後の作業 ここでの実装は SQL Server データベース用ですが、このメソッドは、情報構造ビューを提供する、ANSI-92 標準に準拠する、またはメタデータを提供するあらゆるデータベースに使用できます。これを SqlProcedure クラスにカプセル化すると、必要に応じてストアド プロシージャを簡単に呼び出すことができるため、基本的に反復的なコード作業の多くが削減されます。 SqlProcedure クラスがより多くのデータ型をサポートするには、GetProcedureParameter() メソッドで、必要に応じて各パラメーターの型、方向、長さ、既定値、その他の情報を分析し、このパラメーターを作成する必要があります。基本的に任意の型を実装でき、画像型もこの方法で作成できます。このようにして、クラスは非常に一般的で、あらゆるプロジェクトで役立ちます。
参考文献
[1] Ray Rankins、Paul Jensen、Paul Bertucci、『SQL Server 2000 Practical Book』、北京: Electronic Industry Press、2002
[2] MSDN ライブラリ、2003 年 1 月、Microsoft Corporation
著者について: Liu Zhibo (1979-)、男性、湖南省新華市出身、修士号、主な研究方向: ニューラル ネットワークとパターン認識、オフィス オートメーション情報システム
電子メール:[email protected]