Web表单:检查重复的数据库条目

时间:2017-07-30 13:56:33

标签: c#

我是新手。

我正在尝试检查重复的数据库条目。我的问题是:

  1. 如果条目成功,我希望显示成功提示。
  2. 如果存在重复,则显示重复的通知。
  3. 我的问题是:重复警报会多次显示,但是,如果不存在重复项,则永远不会创建该条目。

    这是我的代码:

    /// <summary>
    /// The following procedure creates the user account in the database The procedure first attempts to
    /// perform a check for duplicates before submitting the registration info
    /// </summary>
    protected void BTN_CreateACNT_Click(object sender, EventArgs e)
    {
        string InsertQuery = "";
        string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Reimburse"].ConnectionString;
        InsertQuery = "Insert into TBL_Logins (FirstName, LastName, EmailAddress, Password) VALUES(@FirstName, @LastName, @EmailAddress, @Password)";
    
        String FirstNameSTR = FN.Text.Trim();
        String LastNameSTR = LN.Text.Trim();
        String EMailAddressSTR = EmailAddress.Text.Trim();
        byte[] PassByte = StrToByteArray(PWD.Text.Trim());
    
        // CheckUser(EMailAddressSTR);
        while (CheckUser(EMailAddressSTR) == false)
        {
            SqlConnection CN = new SqlConnection(ConnectionString);
    
            SqlCommand CMD = new SqlCommand(InsertQuery, CN);
            CMD.CommandType = CommandType.Text;
            CMD.Parameters.AddWithValue("@Firstname", FirstNameSTR);
            CMD.Parameters.AddWithValue("@LastName", LastNameSTR);
            CMD.Parameters.AddWithValue("@EmailAddress", EMailAddressSTR);
            CMD.Parameters.AddWithValue("@Password", PassByte);
    
            CN.Open();
            CMD.ExecuteNonQuery();
            Response.Write("<script language='javascript'>alert('Account created successfully.');</script>");
            CN.Close();
        }
    }
    
    public bool CheckUser(String UserString)
    {
        String UserSelect = "Select * from TBL_Logins where EmailAddress = @EmailAddress";
        int MailCount = 0;
        string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Reimburse"].ConnectionString;
        SqlConnection CN = new SqlConnection(ConnectionString);
        UserString = EmailAddress.Text.Trim();
    
        SqlCommand CMD = new SqlCommand(UserSelect, CN);
        CMD.Parameters.AddWithValue("@EmailAddress", UserString);
        CN.Open();
    
        SqlDataReader dr = CMD.ExecuteReader();
    
        while (dr.Read())
        {
            if (UserString == dr["EmailAddress"].ToString())
            {
                Response.Write("<script language='javascript'>alert('This EMail address is already taken. Please try again.');</script>");
                // return true;
            }
        }
    
        CN.Close();
        return true;
    }
    
    protected void BTN_CreateACNT_Click(object sender, EventArgs e)
    {
        string InsertQuery = "";
        string ConnectionString =                 System.Configuration.ConfigurationManager.ConnectionStrings["Reimburse"].ConnectionString;
        InsertQuery = "Insert into TBL_Logins (FirstName, LastName, EmailAddress, Password) VALUES(@FirstName, @LastName, @EmailAddress, @Password)";
    
        String FirstNameSTR = FN.Text.Trim();
        String LastNameSTR = LN.Text.Trim();
        String EMailAddressSTR = EmailAddress.Text.Trim();
        byte[] PassByte = StrToByteArray(PWD.Text.Trim());
    
        //  CheckUser(EMailAddressSTR);
        while(CheckUser(EMailAddressSTR) == false)
        {
                SqlConnection CN = new SqlConnection(ConnectionString);
    
                SqlCommand CMD = new SqlCommand(InsertQuery, CN);                    
                CMD.CommandType = CommandType.Text;
                CMD.Parameters.AddWithValue("@Firstname", FirstNameSTR);
                CMD.Parameters.AddWithValue("@LastName", LastNameSTR);
                CMD.Parameters.AddWithValue("@EmailAddress", EMailAddressSTR);
                CMD.Parameters.AddWithValue("@Password", PassByte);
    
                CN.Open();
                CMD.ExecuteNonQuery();
                Response.Write("<script language='javascript'>alert('Account created successfully.');</script>");
                CN.Close();
            }
        }
    
        public bool CheckUser(String UserString)
        {
             String UserSelect = "Select * from TBL_Logins where EmailAddress = @EmailAddress";
            int MailCount = 0;
            string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Reimburse"].ConnectionString;
            SqlConnection CN = new SqlConnection(ConnectionString);
            UserString = EmailAddress.Text.Trim();
            SqlCommand CMD = new SqlCommand(UserSelect,CN);
            CMD.Parameters.AddWithValue("@EmailAddress", UserString);
            CN.Open();
            SqlDataReader dr = CMD.ExecuteReader();
    
            while (dr.Read())
            {
                    if (UserString == dr["EmailAddress"].ToString())
                    {
                        Response.Write("<script language='javascript'>alert('This EMail address is already taken. Please try again.');</script>");
                        //                  return true;
                    }           
            }
    
            CN.Close();
            return true;
        }
    

1 个答案:

答案 0 :(得分:0)

看起来CheckUser方法总是返回true,这就是插入不起作用的原因,默认情况下更新方法返回false:

while (dr.Read())
    {
            if (UserString == dr["EmailAddress"].ToString())
            {
                Response.Write("<script language='javascript'>alert('This EMail address is already taken. Please try again.');</script>");
                return true; // return true if user exists
            }           
    }

 CN.Close();
 return false; // return false if the user does not exist

还建议使用使用块来处理数据库连接,而不是手动调用Close()方法。