我想在添加之前检查数据库中是否已存在工作人员。在下面的代码中,即使select语句没有返回结果,也会执行if(dr.HasRows)语句。我不知道我做错了什么。请帮忙。
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;
}
}
答案 0 :(得分: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;
}
答案 1 :(得分:2)
SELECT COUNT(*)将始终返回1个结果,表示行数 您也可以使用ExecuteScalar而不是ExecuteReader来获取此值。