HOWTO · Csharp

C# でパラメータを使用してストアドプロシージャを実行する

この記事では、C# のパラメーターを使用してストアドプロシージャを呼び出す方法について説明します。

このガイドでは、C# のパラメーターを使用してストアドプロシージャを実行/呼び出す方法、つまり、ストアドプロシージャ内でパラメーターを渡す方法を学習します。

このコンパクトなガイドでは、上から下まですべてを学びます。飛び込みましょう!

C# のパラメータを使用してストアドプロシージャを実行する

C# のパラメーターを使用してストアドプロシージャを呼び出す方法を理解するには、ストアドプロシージャに関するすべての基本を理解する必要があります。

それらは何であり、どのような目的で使用されますか?それらの利点は何ですか?それらをどのように作成および変更しますか?

C# のストアドプロシージャ

単一の実行プランにアセンブルされた Transact-SQL ステートメントのコレクションは、ストアドプロシージャです。データベースサーバーは、ストアドプロシージャと呼ばれるコードブロックを使用します。これは、一度コンパイルされて繰り返し使用できるプリコンパイル済みエンティティです。

一連の SQL ステートメントは、ストアード・プロシージャーを使用して順次実行できます。プロセスにデータを提供するには、プロシージャパラメータを使用する必要があります。

ストアドプロシージャは、パラメータマッピングの概念を使用します。フロントエンドとプロシージャパラメータの名前、タイプ、および方向は一致する必要があり、フロントエンドパラメータの長さはプロシージャパラメータの長さ以下である必要があります(パラメータをマップすることしかできません)。

return ステートメントを使用して、プロシージャから任意の値を返します。

C# でストアドプロシージャを使用する理由

データベースからデータにアクセスするには、通常、selectinsertupdate などの SQL クエリを作成します。同じクエリを頻繁に使用する場合は、クエリをストアドプロシージャに変換するのが理にかなっています。

クエリを作成するたびに、データベースがクエリを解析します。ストアドプロシージャを作成した場合は、1 回だけ解析した後、N 回実行できます。

パフォーマンスは、保存されたルーチンを介して強化することもできます。データベースサーバー上の単一の実行ブロックであるストアドプロシージャには、すべての条件付きロジックが含まれています。

C# のパラメーターを使用してストアドプロシージャを実行する:コード例

以下は、C# のパラメーターを使用してストアドプロシージャを実行する手順です。

  • まず、プログラムの直上に using System.Data.SqlClient;using System.Data; ライブラリを追加してください。これらにより、C# のプログラム内でストアドプロシージャを作成することができます。
  • 以下のコード例では、データベースのパスを文字列に渡すことにより、ストアドプロシージャの作成を開始します。
  • その後、using() メソッドを使用して Connection オブジェクト con を作成し、パス文字列を内部に渡しました。
  • SqlCommand のオブジェクトを作成する必要があります。このオブジェクトを使用して、Connection などの SQL コマンドプロパティを利用できます。
  • その後、コマンドタイプを StoredProcedure として指定する必要があります。
  • パラメータを使用してストアドプロシージャを作成するには、SqlParameter のオブジェクトを作成し、そのオブジェクトを使用して、渡すパラメータの名前、データ型、および値を定義する必要があります。
  • 次にやらなければならないことは、それに方向性を与えることです。入力、出力、またはその両方として使用できます。
  • ここで、AddWithValue() を使用して、前に作成したパラメーターオブジェクトを渡します。
  • これらはすべて、try-catch ブロック内で実行する必要があることに注意してください。catch ブロック内でキャッチする必要のあるデータのフェッチ中にエラーが発生する可能性があります。

コード例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace Stored_procedure {
  internal class Program {
    static void Main(string[] args) {
      // connection with sql
      try {
        // string for connection information
        string con_str = "pass your connection path/information";
        // create connection
        using (SqlConnection con = new SqlConnection(con_str)) {
          // create sqlcommand object
          SqlCommand cmd = new SqlCommand();
          cmd.CommandText = "Write the name of your stored prcedure";
          cmd.Connection = con;
          // specify the command type
          cmd.CommandType = CommandType.StoredProcedure;

          // create object of sqlparameter class
          SqlParameter param = new SqlParameter {
            // set the name of parameter
            ParameterName = "Write your parameter name",
            // set the type of parameter
            SqlDbType = SqlDbType.Int, Value = 2,
            // you can specify the direction of parameter input/output/inputoutput
            Direction = ParameterDirection.InputOutput
          };
          // adding parameter in command
          cmd.Parameters.AddWithValue(param);
          // open connection of db
          con.Open();
          // executing the query
          cmd.ExecuteNonQuery();
        }
      } catch (Exception e) {
        Console.WriteLine(e.Message);
      }
    }
  }
}