動作確認が正常に終了したところで、今回使用するストアドファンクションを作成します。作成方法については、第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.