2013-11-04 2 views
0

추가하기 전에 스태프 멤버가 데이터베이스에 아직 없는지 확인하고 싶습니다. 아래 코드에서 select 문이 결과를 반환하지 않은 경우에도 if (dr.HasRows) 문이 실행됩니다. 내가 뭘 잘못하고 있는지 모르겠다. 도와주세요.SqlDataReader에 행이 있는지 확인하십시오.

using (SqlCommand sqlCommand = new SqlCommand("select COUNT(*) from 
     [CLIENT_PROCESSING_CLIENT_INFORMATION] where Client_NB_Number 
     = @StaffNo", sqlConn)) 
{ 
    sqlCommand.Parameters.AddWithValue("@StaffNo", strStaffNumber); 
    SqlDataReader dr = sqlCommand.ExecuteReader(); 
    string strMsg = ""; 
    if(dr.HasRows) 
    { 
     strMsg = "NB" + strStaffNumber + " already exists."; 
     String Script = "<Script language=\"javascript\">alert('" + strMsg + " ') 
      </script>"; 
     if (!Page.ClientScript.IsClientScriptBlockRegistered("OpenAlert")) 
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), 
       "OpenAlert", Script); 
     return; 
    } 
} 

답변

2

항상 결과가있는 단일 행을 반환하는 을 반환합니다.

여기에 독자가 필요하지 않으므로 ExecuteScalar을 사용하면 첫 번째 행의 첫 번째 열을 기본적으로 반환합니다. 예 :

if ((int)sqlCommand.ExecuteScalar() > 0) 
{ 
    strMsg = "NB" + strStaffNumber + " already exists."; 
    String Script = "<Script language=\"javascript\">alert('" + strMsg + " ') </script>"; 
    if (!Page.ClientScript.IsClientScriptBlockRegistered("OpenAlert")) 
     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "OpenAlert", Script); 
    return; 
} 
+0

고마워요. 나는 그것을 집어들 수 없었다. 고마워요. – Kgabo

2

SELECT COUNT (*)는 항상 1 개의 결과를 의미하는 행 수를 반환합니다.
ExecuteReader 대신 ExecuteScalar를 사용하여이 값을 가져올 수도 있습니다.

관련 문제