ストアドプロシージャの呼び出し

C# のプログラムからストアドプロシージャを呼びだす方法を紹介します。

ここではストアドプロシージャが、レコードを返すものとします。

この他に、ストアドプロシージャの戻り値や OUTPUT を取得するなどの必要性もありますが、ここでは基本的なレコードセットをプログラムで受け取る場合を考えましょう。

次の SQL Management Studio のスクリーンショットを見てください。

ここで実行しようとしているストアドプロシージャは、CustomerID を引数としてとります。CustomerID をひとつ選ぶために、SELECT * FROM Customers として Customers テーブルの内容を確認しています。 CustomerID としてここでは 'ALFKI' というコードを取り上げてみました。そして、それを引数としてストアドプロシージャ CustOrdersOrders を呼んでいます。

その結果として、OrderID 10643, 10692, 10702, ... というレコードが見えています。

プログラムからも同様の結果が取得できるか、試してみましょう。

コードは次の通りです。(SqlConnection に渡す接続文字列に関しては、「SQL Server との接続とデータの取得」をみてください。ここでは省略して... としています。)

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace StoredProcedureTest1 {
  class Program {
    static void Main( string[] args ) {
      using( var conn = new SqlConnection(...) ) {
        var cmd = conn.CreateCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "CustOrdersOrders";
        cmd.Parameters.AddWithValue( "@CustomerID", "VINET" );
        conn.Open();
        using( var sdr = cmd.ExecuteReader() ) {
          if( sdr.HasRows ) {
            while( sdr.Read() ) {
              Console.WriteLine( "{0}: {1}",
                sdr["OrderID"],
                ((DateTime)sdr["OrderDate"]).ToShortDateString() );
            }
          }
        }
      }
    }
  }
}

実行結果は次の通りです。

確かに結果が取得できていますね。

前回の記事「SQL Server との接続とデータの取得」との違いは SqlCommand の CommandType と CommandText の設定と、パラメータを設定している箇所のみです。

  cmd.CommandType = CommandType.StoredProcedure;
  cmd.CommandText = "CustOrdersOrders";
  cmd.Parameters.AddWithValue( "@CustomerID", "VINET" );

このように呼び出すことで、C# からストアドプロシージャを呼び出すことが可能です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門