2014-02-06 8 views
0

Во-первых, я зарегистрируюсь на своем веб-сайте, и тогда я могу присоединиться к частной группе, используя имя пользователя и пароль. Проблема в том, что если я пытаюсь вставить в группу, к которой я уже присоединился, в моей таблице появляется дублирующаяся запись.Избегайте дублирования записей в таблице. Asp.net

Итак, у меня есть таблица участников (MemberId-PK, Username и т. Д.), Таблица присвоения групп (MemberId - FK), (GroupId - FK) и группы (GroupId - PK), имя, пароль, Спорт).

Вот мой код:

protected void Button1_Click(object sender, EventArgs e) 
    { 

     SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Tom\Documents\BIS\4th Year\FYP\FYP\Back-up\test2\FitnessForYou V1-08.01\FitnessForYou\FitnessForYou\App_Data\MembersData.mdf;Integrated Security=True"); 

     con.Open(); 

     SqlCommand cmd2 = new SqlCommand("select COUNT(*)FROM Groups WHERE GroupName='" + txtGroupName.Text + "' and Password='" + txtPassword.Text + "'"); 




     cmd2.Connection = con; 




     int OBJ = Convert.ToInt32(cmd2.ExecuteScalar()); 
     if (OBJ > 0) 
     { 

      con.Close(); 
      con.Open(); 

      cmd2.CommandText = "Insert into AssignGroups(MemberId,GroupId) Select Members.MemberId, Groups.GroupId From Members, Groups Where Members.Username= '" + lblRegistered.Text + "' And Groups.GroupName= '" + txtGroupName.Text + "'"; 



      Session["GroupName"] = txtGroupName.Text; 




      cmd2.ExecuteNonQuery(); 
      cmd2.Clone(); 
      Response.Redirect("GroupMembers.aspx"); 
     } 
     else 
     { 
      lblError.Text = "Invalid username or password"; 
      this.lblError.ForeColor = Color.Red; 
     } 
     con.Close(); 
    } 

Этот код вставляет свою запись в tabeo имеет ли дубликаты или нет. Как я могу проверить базу данных, чтобы увидеть, если вы уже являетесь членом, и, следовательно, дать им приглашение, не вставляя запись снова.

Спасибо!

+3

У вас есть уязвимость в SQL-инъекции. – SLaks

+3

** Не храните пароли в текстовом формате! ** – SLaks

+2

Безопасность ** жесткая **. Не изобретайте велосипед. Вы должны использовать существующую проверенную систему аутентификации. – SLaks

ответ

1

Попробуйте добавить cmd2.Connection = con; перед выполнением команды. Отсутствует связь между командой и соединением в приведенном выше коде.

+0

Спасибо за ответ. Я отредактировал свой ответ выше, используя cmd2.Connection = con. Как я смогу проверить, существует ли запись перед вставкой? – user3249809

+0

Вы можете проверить (OBJ == 0) {insert code} else {записать уже существующий код}. Я думаю, что ваш код кажется правильным. Просто измените OBJ> 0 с OBJ == 0. –

+0

После этого он останавливает дубликаты, но также останавливает законную вставку, если нет дубликатов. На этом этапе это очень близко. Вы видите что-нибудь еще, что я могу добавить, чтобы решить эту проблему? – user3249809

0

Я не являюсь sql-парнем, но вот запрос, который вы, возможно, захотите запустить, чтобы проверить, назначен ли член группе.

Select Count(*) from AssignGroups where 
    MemberId IN (Select MemberID from Members where Username='username') 
    And GroupId IN (Select GroupID from Groups where GroupName='YourGroupName') 

Если оно возвращает положительное значение, член уже назначен группе, и поэтому ничего не делать. Else, член не назначен, и вы можете запустить запрос Insert.

Смежные вопросы