動作確認が正常に終了したところで、今回使用するストアドファンクションを作成します。作成方法については、第2回の記事をご参照ください。社員番号をキーに給料列を更新し、変更行数を返す単純なファンクションとなります(リスト1)。
FUNCTION "SCOTT"."UPDATESALARY" ( "ID" IN NUMBER, "SALARY" IN NUMBER) RETURN NUMBER IS BEGIN UPDATE EMP SET SAL = SALARY WHERE EMPNO = ID; --戻り値は変更行数 RETURN SQL%ROWCOUNT; --すべてのエラーをトラップ EXCEPTION WHEN OTHERS THEN RETURN 0; END "UPDATESALARY";
ストアドファンクションを呼び出すWebサービスの実装に入ります。まずはこれまでと同様に、App_CodeフォルダにDataAccessクラスを追加します(図5)。
DataAccessクラスにストアドファンクションを呼び出すUpdateSalaryメソッドを追加します(リスト2)。前回までと同様、コードにはエラー処理やガベージ処理は記述していませんので、環境に応じてカスタマイズしてください。
Public Function UpdateSalary(ByVal empNo As Integer, _ ByVal salary As Integer) As Integer Dim retVal As Integer conn = Me.DbConnect cmd = conn.CreateCommand cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "UPDATESALARY" '戻り値パラメータを指定 Dim param1 As DbParameter param1 = cmd.CreateParameter param1.DbType = DbType.Int32 param1.Direction = ParameterDirection.ReturnValue cmd.Parameters.Add(param1) Dim param2 As DbParameter param2 = cmd.CreateParameter param2.Value = empNo cmd.Parameters.Add(param2) Dim param3 As DbParameter param3 = cmd.CreateParameter param3.Value = salary cmd.Parameters.Add(param3) 'ストアドファンクション実行 cmd.ExecuteNonQuery() retVal = param1.Value Return retVal End Function
同様に、従業員情報を取得するGetEmpDataメソッドを記述します(リスト3)。
Public Function GetEmpData() As DataSet conn = Me.DbConnect cmd = conn.CreateCommand cmd.Connection = conn 'EMP表から全件取得 cmd.CommandText = "SELECT * FROM EMP" ds = New DataSet da = factory.CreateDataAdapter() da.SelectCommand = cmd da.Fill(ds) Return ds End Function
続いて給料列更新の入り口となるWebサービスを作成します。Services.vb(またはcs)ファイルを開き、リスト4のように記述します。
<WebMethod()> _ Public Function UpdateSalary(ByVal empNo As Integer, _ ByVal salary As Integer) As Integer Dim da As New DataAccess Return da.UpdateSalary(empNo, salary) End Function
同様にEMPテーブルの内容を返すGetEmpData Webサービスを追加します(リスト5)。
<WebMethod()> _ Public Function GetEmpData() As System.Data.DataSet Dim da As New DataAccess Return da.GetEmpData End Function
これでWebサービスの実装は終了です(図6)。デバッグを実行することで給料列の更新や更新後データの確認が可能です。
Copyright © ITmedia, Inc. All Rights Reserved.