Web窗体:检查重复的数据库条目

问题描述:

我是新手。Web窗体:检查重复的数据库条目

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

  1. 如果条目成功,我希望显示成功警报。
  2. 如果存在重复,则显示重复通知。

我的问题是:重复警报会显示多次,但是,如果没有重复项,将永远不会创建该项。

这是我的代码:

/// <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; 
    } 

貌似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()方法。