2012-09-28 2 views
0

우리는 3 개의 매개 변수, fname, lname, 개인이 회사의 직원인지 확인하는 데 사용되는 다른 페이지를 hiredate하는 양식을 가지고 있습니다.직원이 혜택을 받기 위해 등록되어 있는지 어떻게 확인할 수 있습니까?

아래 코드는이 세 가지 매개 변수를 기반으로 한 확인을 수행합니다.

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") & "'" 

확인이 개인이 직원이 실제로는 것을 확인하는 경우

, 다음 코드는 혜택을받을 그/그녀의 eligibity을 확인 :

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 
+0

어떻게 혜택 쿼리를 실행합니까? xecutescalar 또는 executedql. –

+4

코드가 SQL Injection 공격에 취약합니다. – Dai

+0

내가 보여준 코드는 매우 긴 코드의 조각입니다. 내 논리가 꺼져 있는지 누군가가 알 수 있기를 바란다. 나중에 주사에 대해 걱정할 수 있습니다. – Kenny

답변

0

당신은 데이터를 선택하는,하지만 당신은 데이터에 의해 제한 할 : 당신은 내부도 할 수

SELECT 
    e.fname, 
    e.lname, 
    e.hiredate 
FROM 
    dbo.EMP e 
WHERE 
    e.fname LIKE %@fname And e.lname LIKE %@lname% 
    AND 
    e.hiredate = @hiredate 
    AND 
    EXISTS (
     SELECT 
      1 
     FROM 
      Comp 
     WHERE 
      comp.emp_ID = e.emp_ID 
    ) 

은 테이블을 조인 :

SELECT 
    e.fname, 
    e.lname, 
    e.hiredate, 
    c.* 
FROM 
    dbo.EMP e 
    INNER JOIN Comp c ON e.emp_ID = c.emp_ID 
WHERE 
    e.fname LIKE %@fname And e.lname LIKE %@lname% 
    AND 
    e.hiredate = @hiredate 
관련 문제