使用C#在数据库中具有相同记录时返回false

时间:2017-02-23 14:33:42

标签: c# sql sql-server

我想要以防万一我在数据库中有同样的姓氏和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;

        }

     }

4 个答案:

答案 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。