2013-11-04 64 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

你正在返回Count(*)它總是會返回一個單行的結果。

這裏不需要讀者,你可以使用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結果意味着行數。
您也可以使用ExecuteScalar而不是ExecuteReader來獲取此值。