.NETアプリケーションから ADO.NET で SQL Server上 のストアド ファンクションを実行し、結果を表示するサンプルです。ストアド ファンクションには スカラー値関数 と テーブル値関数 がありますが、それぞれ呼び出し方が異なります。
スカラー値関数 と テーブル値関数 の違い
スカラー値関数 は戻り値として値を一つだけ返し、テーブル値関数 はテーブルを返します。-
スカラー値関数の例 - INT型の引数を1つ持ち、入力値を倍にして返します。
CREATE FUNCTION [dbo].[ScalarFunction_Sample] ( @param1 int ) RETURNS int AS BEGIN RETURN @param1 * 2 END
-
テーブル値関数の例 - sys.objectsテーブルの内容をそのまま返します。
CREATE FUNCTION [dbo].[TableFunction_Sample] ( ) RETURNS TABLE AS RETURN ( SELECT * FROM sys.objects )
スカラー値関数の呼び出し方
SELECT文 を使用し、項目名 の代わりに スカラー値関数 を指定します。引数がある場合は SQLパラメーター で渡します。-
C#
/// <summary> /// スカラー値関数を呼ぶ /// </summary> private void ScalarFunction(string connectionString) { using (SqlConnection connection = new SqlConnection(connectionString)) { // コネクションを開く connection.Open(); // コマンド作成 SqlCommand command = connection.CreateCommand(); // SQL command.CommandText = "SELECT dbo.ScalarFunction_Sample(@param)"; // SQLパラメータ設定 SqlParameter param1 = new SqlParameter("@param", SqlDbType.Int); param1.Value = 100; command.Parameters.Add(param1); // コマンド実行 object result = command.ExecuteScalar(); // 結果表示 MessageBox.Show(result.ToString()); } }
-
VB.NET
''' <summary> ''' スカラー値関数を呼ぶ ''' </summary> Private Sub ScalarFunction(ByVal connectionString As String) Using connection As New SqlConnection(connectionString) ' コネクションを開く connection.Open() ' コマンド作成 Dim command As SqlCommand = connection.CreateCommand ' SQL command.CommandText = "SELECT dbo.ScalarFunction_Sample(@param)" ' SQLパラメータ設定 Dim param1 As New SqlParameter("@param", SqlDbType.VarChar) param1.Value = 100 command.Parameters.Add(param1) ' コマンド実行 Dim result As Object = command.ExecuteScalar() ' 結果表示 MessageBox.Show(result.ToString) End Using End Sub
テーブル値関数の呼び出し方
SELECT文を使用し、テーブル名 の代わりに テーブル値関数 を指定します。引数がある場合は SQLパラメーター で渡します。 次のサンプルではテーブル値関数を呼び、結果をデータグリッドビューで表示しています。-
C#
/// <summary> /// テーブル値関数を呼ぶ /// </summary> private void TableFunction(string connectionString) { using (SqlConnection connection = new SqlConnection(connectionString)) { // コネクションを開く connection.Open(); // コマンド作成 SqlCommand command = connection.CreateCommand(); // SQL command.CommandText = "SELECT * FROM dbo.TableFunction_Sample()"; // ストアド プロシージャを実行し、SELECT結果をdataSetへ格納 DataSet dataSet = new DataSet(); using (SqlDataAdapter adapter = new SqlDataAdapter(command)) { adapter.Fill(dataSet); } // 結果表示 this.dataGridView1.DataSource = dataSet.Tables[0]; } }
-
VB.NET
''' <summary> ''' テーブル値関数を呼ぶ ''' </summary> Private Sub TableFunction(ByVal connectionString As String) Using connection As New SqlConnection(connectionString) ' コネクションを開く connection.Open() ' コマンド作成 Dim command As SqlCommand = connection.CreateCommand ' SQL command.CommandText = "SELECT * FROM dbo.TableFunction_Sample()" ' ストアド プロシージャを実行し、SELECT結果をdataSetへ格納 Dim dataSet As DataSet = New DataSet() Using adapter As SqlDataAdapter = New SqlDataAdapter(command) adapter.Fill(dataSet) End Using ' 結果表示 Me.DataGridView1.DataSource = dataSet.Tables(0) End Using End Sub
サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2008 以上のバージョンが必要です。 2008以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。検証環境
- Microsoft Visual Studio 2008 Version 9.0.30729.4462 QFE Edition: Professional
- Microsoft .NET Framework Version 3.5 SP1
- Microsoft SQL Server Express Edition (64-bit) プラットフォーム:NT x64 バージョン:10.0.2531.0
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))