2014-02-06 6 views
0

먼저 웹 사이트에 등록한 다음 사용자 이름과 암호를 사용하여 개인 그룹에 가입 할 수 있습니다. 문제는 내가 이미 가입 한 그룹에 삽입하려고하면 중복 된 레코드가 내 테이블에 나타납니다.테이블에서 중복 레코드 피하기 asp.net

회원 테이블 (MemberId-PK, 사용자 이름 등), 그룹 테이블 지정 (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 {record already exists code}를 확인할 수 있습니다. 나는 당신의 코드가 맞는 것 같아요. 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') 

양수 값을 반환하면 구성원이 이미 그룹에 할당되어 있으므로 아무 것도 수행하지 않습니다. 그렇지 않으면 구성원이 지정되지 않고 삽입 쿼리를 실행할 수 있습니다.