我想要以防万一我在数据库中有同样的姓氏和DOB来返回false。目前,当我没有重复时,下面的代码返回false事件 感谢
C# code
private bool duplicatPatient()
{
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["Molecular"].ConnectionString);
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = @"SELECT MBID, HospitalNumber, NHSNumber, DOB, Surname, Forename
FROM Patient
WHERE
Surname= @Surname and DOB= @DOB";
cmd.Parameters.AddWithValue("@Surname", txtSearchSurname.Text);
cmd.Parameters.AddWithValue("@DOB", txtSearchDOB.Text);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
int userCount = (int) cmd.ExecuteScalar();
da.Fill(dt);
代码的这一部分检查我们是否有更多的患者
if (userCount >1 )
{
// message in case we have patient with same details
Response.Write("<script>alert('Details entered Return more than one Patient. Click Patient Information Link to Select the Right Patient')</script>");
return false;
}
else
{
// no patient with same record
return true;
}
}
答案 0 :(得分:1)
ExecuteScalar只返回查询第一行的第一列
您需要在另一个查询上执行标量:
cmdCount.CommandText = @"SELECT count(*)
FROM Patient
WHERE
Surname= @Surname and DOB= @DOB";
cmdCount.Parameters.AddWithValue("@Surname", txtSearchSurname.Text);
cmdCount.Parameters.AddWithValue("@DOB", txtSearchDOB.Text);
int cmdCount= (int) cmdCount.ExecuteScalar();
答案 1 :(得分:0)
您正在使用cmd.ExecuteScalar()
返回查询返回的第一行的第一列,在您的情况下为MBID
。
您可以使用SELECT COUNT
类型语句来计算返回的行,或者只使用cmd.ExecuteReader
并循环显示结果,让您选择。
答案 2 :(得分:0)
根据
更改您的代码cmd.CommandText = @"SELECT count(MBID)
FROM Patient
WHERE
Surname= @Surname and DOB= @DOB";
答案 3 :(得分:0)
您需要修改您的Sql查询
尝试以下
cmd.CommandText = @"SELECT Count(*)
FROM Patient
WHERE
Surname= @Surname and DOB= @DOB";
这应该返回一个带有匹配数的int。