ストアドプロシージャの呼び出し
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# からストアドプロシージャを呼び出すことが可能です。