最近、VB.NETでのSQL-Serverの関数およびプロシージャの実行をやったのでその忘備録です。
先ず、簡単な関数およびプロシージャをSQL-Serverに登録します。
FUNCTION、PROCEDURE共に階乗の計算を行います。VB.NETからの実行例ですので、 結果が桁数を超えるなどの制限は取り敢えず考えていません。
以下がそれぞれの内容です。
2012/06/13:の時の情報
先ず、簡単な関数およびプロシージャをSQL-Serverに登録します。
FUNCTION、PROCEDURE共に階乗の計算を行います。VB.NETからの実行例ですので、 結果が桁数を超えるなどの制限は取り敢えず考えていません。
以下がそれぞれの内容です。
----------------------------------------- -- 階乗を計算する(関数) ----------------------------------------- CREATE FUNCTION [dbo].[FuncTest]( @SrcNumber DECIMAL --引数 ) RETURNS DECIMAL BEGIN DECLARE @DesNumber DECIMAL SET @DesNumber = 1 WHILE @SrcNumber > 0 BEGIN SET @DesNumber = @DesNumber * @SrcNumber SET @SrcNumber = @SrcNumber - 1 END RETURN @DesNumber END ----------------------------------------- -- 階乗を計算する(プロシージャ) ----------------------------------------- CREATE PROCEDURE [dbo].[ProcTest] @SrcNumber DECIMAL --引数 ,@DesNumber DECIMAL OUTPUT --戻り値 AS BEGIN SET @DesNumber = 1 WHILE @SrcNumber > 0 BEGIN SET @DesNumber = @DesNumber * @SrcNumber SET @SrcNumber = @SrcNumber - 1 END ENDVB.NETでの実行は以下の様になります。関数の実行および、プロシージャの実行を別の関数にしてあります。
'関数の実行 Private Sub TestFunc() 'コネクション・接続文字列 Dim Con As New System.Data.SqlClient.SqlConnection( _ "Data Source=(local)\SQLEXPRESS;" & _ "Initial Catalog=TEST;Integrated Security=SSPI") Try 'コネクションオープン Con.Open() '取得関数SQL Dim SQL As String = "SELECT [dbo].[FuncTest](@SrcNumber)" 'SQLコマンド生成(コネクション指定) Dim sqlCommand As New System.Data.SqlClient.SqlCommand(SQL, Con) 'SQLコマンドへ引数設定 sqlCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@SrcNumber", 10)) 'SQLコマンド実行 Dim obj As Object = sqlCommand.ExecuteScalar Console.Write(CDec(obj)) Finally 'コネクション破棄 If Con.State <> System.Data.ConnectionState.Closed Then Con.Close() Con.Dispose() End If End Try End Sub 'プロシージャの実行 Private Sub TestProc() 'コネクション・接続文字列 Dim Con As New System.Data.SqlClient.SqlConnection( _ "Data Source=(local)\SQLEXPRESS;" & _ "Initial Catalog=TEST;Integrated Security=SSPI") Try 'コネクションオープン Con.Open() '取得関数SQL Dim SQL As String = "[dbo].[ProcTest]" 'SQLコマンド生成 Dim sqlCommand As New System.Data.SqlClient.SqlCommand(SQL, Con) 'ストアド・プロシージャ設定 sqlCommand.CommandType = System.Data.CommandType.StoredProcedure 'SQLコマンドへ第1引数設定(SrcNumber) sqlCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@SrcNumber", 10)) 'SQLコマンドへ第2引数設定(DesNumber:出力指定) Dim prmDesNumber As New System.Data.SqlClient.SqlParameter With prmDesNumber .ParameterName = "@DesNumber" 'パラメータ名 .DbType = Data.DbType.Decimal 'DBのデータ型 .Direction = System.Data.ParameterDirection.Output '出力 .Precision = 18 'DECIMAL(18,0) .Scale = 0 '(小数点以下指定) .Value = 0 '取り敢えず値をクリア End With sqlCommand.Parameters.Add(prmDesNumber) 'プロシージャ実行 sqlCommand.ExecuteNonQuery() '戻り値を表示 Console.Write(prmDesNumber.Value) Finally 'コネクション破棄 If Con.State <> System.Data.ConnectionState.Closed Then Con.Close() Con.Dispose() End If End Try End Sub=====
2012/06/13:の時の情報
PR
コメント