個人が会社の従業員であるかどうかを確認するために使用される別のページに、fname、lname、hiredate の 3 つのパラメーターを渡すフォームがあります。
以下のコードは、これら 3 つのパラメーターに基づいて検証を行います。
Dim sqlstr As String = "SELECT fname,lname,hiredate (SELECT COUNT(*) FROM Comp WHERE comp.emp_ID = e.emp_ID) AS [exists], b.* FROM dbo.EMP e LEFT OUTER JOIN comp b ON e.emp_id=b.emp_id WHERE e.fname Like '%" & Request.QueryString("fname") & "%' And e.lname Like '%" & Request.QueryString("lname") & "%' And e.hiredate = '" & Request.QueryString("hiredate") & "'"
チェックにより、この個人が実際に従業員であることが確認された場合、次のコードは、福利厚生を受け取る資格があるかどうかをチェックします。
If myDS.Tables(0).Rows.Count > 0 Then
Dim listOfBenefits = New List(Of String) ( { _
"CT07B", "CT081", "CT083", "SG09A", "SG10", "SC11A", "SG23", "SG23A", "SG27" _
})
If Not listOfBenefits.Contains(txtBenefits.Text) Then
blMsg.Text = "This employee is not eligible to receive any of the listed benefits yet."
End If
End If
これはこれまでのところ非常にうまく機能しています。
現在、特定の従業員が福利厚生に登録されているかどうかを確認する別のチェックを追加しようとしています。
従業員がいずれの福利厚生にも登録していない場合は、資格を確認する必要はありません。
一方、従業員が何らかの福利厚生に登録している場合は、上記の福利厚生のいずれかの資格があるかどうかを確認します。
従業員が福利厚生に登録されているかどうかを判断するためのチェックが無視されているため、これまでのところ私のチェックは機能していません。
私は何を間違っていますか?
特典の登録のチェックを含む更新されたコードを次に示します。
Dim sqlstr As String = "SELECT fname,lname,hiredate, (SELECT COUNT(*) FROM Comp WHERE comp.emp_ID = e.emp_ID) AS [exists], b.* FROM dbo.EMP e LEFT OUTER JOIN comp b ON e.emp_id=b.emp_id WHERE e.fname Like '%" & Request.QueryString("fname") & "%' And e.lname Like '%" & Request.QueryString("lname") & "%' And e.hiredate = '" & Request.QueryString("hiredate") & "'"
If myDS.Tables(0).Rows.Count > 0 Then
' Ok, this individual is an employee, let's check to see if s/he has registered for any benefits.
benefitSQL = "SELECT fname, lname, (SELECT COUNT(*) FROM benefits WHERE benefits.emp_ID = e.emp_ID) AS [exists], b.* FROM dbo.EMP e LEFT OUTER JOIN benefits b ON e.emp_id=b.emp_id "
If CInt(exists.Value) > 0 Then
' Then employee has some benefits. Now, check whether one of those benefits is on the list below. '
Dim listOfBenefits = New List(Of String) ( { _
"CT07B", "CT081", "CT083", "SG09A", "SG10", "SC11A", "SG23", "SG23A", "SG27" _
} )
If Not listOfBenefits.Contains(txtBenefits.Text) Then
lblMsg.Text = "This employee is not eligible to receive any of the listed benefits yet."
End If
Else
lblMsg.Text = "This employee has not registered for any benefits yet."
End If
End If
次のようにフォーマットされた SQL。
SELECT
fname,
lname,
hiredate,
(
SELECT
COUNT(*)
FROM
Comp
WHERE
comp.emp_ID = e.emp_ID
) AS [exists],
b.*
FROM
dbo.EMP e
LEFT OUTER JOIN comp b ON e.emp_id = b.emp_id
WHERE
e.fname LIKE %@fname And e.lname LIKE %@lname%
AND
e.hiredate = @hiredate