以前の記事「【VB.NET】SQLを実行する」でVB.NETからSQLを実行する方法について説明しました。
今回は、SQL Serverのストアドプロシージャの実行方法について説明します。

以下、サンプル。
【データベース環境】
・データベース名:Sample
・テーブル名  :SampleTable
・SampleTableの項目
 Key01(int), Key02(char(3)), Field01(nchar(10)), Field02(numeric(18,0))
※ ()内は、データ型と桁数を示す

 SampleTableのデータは適当に入力して下さい。

【ストアドプロシージャ】
USE Sample
CREATE PROCEDURE sp_Sample
@Key1 int = 0,
@Key2 char(3) = " "
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM SampleTable
WHERE Key01 = @Key1
AND Key02 = @Key2
END
GO

上記をクエリに貼り付けて実行すれば、ストアドプロシージャを作成します。
【VB.NET】
Public Class SPSample
Public Shared Sub Main()
Dim Con As New SqlClient.SqlConnection
Con.ConnectionString = _
"Data Source = [サーバ名];" & _
"Initial Catalog = [データベース名];" & _
"Integrated Security = SSPI"

Try
Con.Open()
Dim command As New SqlClient.SqlCommand
'コネクションの指定
command.Connection = Con
'コマンドの種類をストアドに変更
command.CommandType = CommandType.StoredProcedure
'実行するストアドプロシージャ名を指定
command.CommandText = "sp_Sample"
'ストアドプロシージャのパラメータを設定
'commandオブジェクトのパラメータを初期化する

command.Parameters.Clear()
'ストアドプロシージャのパラメータに値を設定する
'パラメータ数分だけ追加する必要がある

command.Parameters.Add("@Key1", SqlDbType.Int).Value = 1
command.Parameters.Add("@Key2", SqlDbType.Char).Value = "001"

'ストアドプロシージャの結果を取得する
Dim sr As SqlClient.SqlDataReader
sr = command.ExecuteReader()
command.Dispose()

'取得した結果を出力する
While sr.Read
'レコードの全項目を出力する
For cols As Integer = 0 To sr.FieldCount - 1
If cols > 0 Then
Console.Write(",")
End If
Console.Write("{0}", sr(cols).ToString)
Next
Console.Write(System.Environment.NewLine)
End While
Finally
'コネクションの破棄
If Con.State <> ConnectionState.Closed Then
Con.Close()
Con.Dispose()
End If
End Try
End Sub
End Class

上記のようにSqlClient.SqlCommandオブジェクトの設定値を変更することで、ストアドプロシージャを実行することができます。
ストアドプロシージャに引数がある場合、Parameters.Add()メソッドを記述する必要があります。
このメソッドの第1引数はパラメータ名、第2引数はデータ型となっています。
パラメータ名とデータ型は、ストアドプロシージャの引数の定義に合わせて下さい。
引数に値を設定するには、Valueプロパティを利用します。

【補足事項】
・パラメータが存在しない場合、Parameters.Add()メソッドは不要です。
・サンプルと同じ方法でシステムストアドプロシージャを実行することができます。