【问题标题】:Return false when I have Identical record in the database using C#当我使用 C# 在数据库中有相同的记录时返回 false
【发布时间】:2017-07-14 02:32:28
【问题描述】:

如果我在数据库中有具有相同姓氏和出生日期的患者返回 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;

        }

     }

【问题讨论】:

标签: c# sql sql-server


【解决方案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();

【讨论】:

    【解决方案2】:

    你需要修改你的Sql查询

    试试下面的

    cmd.CommandText = @"SELECT  Count(*) 
                                FROM         Patient
                                 WHERE
                                        Surname= @Surname and DOB= @DOB";
    

    这应该返回一个带有匹配数的 int。

    【讨论】:

      【解决方案3】:

      相应地更改您的代码

      cmd.CommandText = @"SELECT count(MBID)
                             FROM Patient
                            WHERE
                               Surname= @Surname and DOB= @DOB";
      

      【讨论】:

        【解决方案4】:

        您正在使用cmd.ExecuteScalar(),它返回查询返回的第一行的第一列,在您的情况下为MBID

        您可以使用 SELECT COUNT 类型语句来计算返回的行数,也可以只使用 cmd.ExecuteReader 并循环遍历结果以保持您的选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          • 2014-07-16
          • 1970-01-01
          • 2011-03-22
          • 2021-06-21
          相关资源
          最近更新 更多