2013-12-08 6 views
0

다음 코드를 사용하여 데이터베이스에 저장하려고했습니다. 조건은 다음과 같습니다. 드롭 다운 목록에 값이 있고 값은 New = 1이고 old = 2입니다. 사용자가 1 또는 신규를 선택하면 데이터를 데이터베이스에 저장하거나 오래된 데이터를 선택하면 기존 데이터를 표시합니다.데이터가 데이터베이스에 저장되지 않는 이유는 무엇입니까?

이제 내 레이블에 데이터가 삽입 된 것으로 표시되지만 데이터는 테이블에 저장되지 않지만 오류는 표시되지 않습니다.

protected void btnsave_Click(object sender, EventArgs e) 
     { 
      if (ddl.Text=="1") 
      { 
       cs.Open(); 
       string query = "insert into resig (@id,@name,@email) values('"+txtgn.Text+"','"+txtgname.Text+"','"+txtsg.Text+"')"; 
       SqlCommand cmd = new SqlCommand(query,cs); 
       lbdmsg.Text = "Data Inserted"; 

       //txtgname.Text = ddl.SelectedItem.ToString(); 

      } 
      else 
      { 
       cs.Open(); 
       string query = "select name, email from resig where id='" + txtgn + "'"; 
       SqlCommand cmd= new SqlCommand(query,cs); 
       dr =cmd.ExecuteReader(); 
       while(dr.Read()) 
       { 
        string name= txtgname.Text; 
        string email=txtsg.Text; 
       } 
       cs.Close(); 
      } 
     } 
+1

코드를 편집 한 후 ... – Mauro

답변

3

2 가지를 참조하십시오.

  • 값이 아닌 열 이름을 매개 변수화하려고합니다.
  • ExecuteNonQuery()과 함께 삽입 명령을 실행하지 않습니다.

parameterized queries을 사용해야합니다. 이러한 종류의 문자열 연결은 SQL Injection 공격에 대해 열려 있습니다.

예 :

if (ddl.Text == "1") 
{ 
    string query = "insert into resig (id,name,email) values(@id, @name, @email)"; 
    SqlCommand cmd = new SqlCommand(query,cs); 
    cmd.Parameters.AddWithValue("@id", txtgn.Text); 
    cmd.Parameters.AddWithValue("@name", txtgname.Text); 
    cmd.Parameters.AddWithValue("@email", txtsg.Text); 
    cs.Open(); 
    cmd.ExecuteNonQuery(); 
} 
+0

을 실행하지 않으면 데이터베이스 테이블이 데이터를 테이블로 가져 오지만 데이터베이스 ID = ' "+ id.Text +"'에서 데이터를 선택하는 중 ... – MNAH

+0

@MNAH 나는 당신의 코드에서'id.Text'를 보지 못합니다. 어쩌면 당신은 또 다른 질문으로 물어봐야 할 것입니다 .. –

+0

유감스럽게 생각하는 보스 id = ' "+ txtgn +"' " – MNAH

1

전화 cmd.ExecuteNonQuery()

1

귀하의 SQL은 SQL 주입에 취약/모두 잘못, 매우 위험하여 DB에 명령을 실행합니다. 괄호 안의 첫 번째 목록은 열 목록이어야하며, 값 목록이 매개 변수는 SQL 주입을 방지하는 것 :

string query = "insert into resig (id, name, email) values(@id, @name, @email)"; 
SqlCommand cmd = new SqlCommand(query, cs); 
cmd.Parameters.Add(new SqlParameter("@id", txtgn.Text)); 
cmd.Parameters.Add(new SqlParameter("@name", txtgname.Text)); 
cmd.Parameters.Add(new SqlParameter("@email", txtsg.Text)); 
cmd.ExecuteNonQuery(); 

당신은뿐만 아니라 선택 문을 매개 변수화한다. 왜 이것이 중요한가? 사용자가 id에 대해 이것을 입력하고 구형을 선택한 경우 결과 SQL을 고려하십시오.

'; resig를 삭제하십시오; -

사용자 입력을 연결하여 SQL을 작성하면 나쁜 의도로 사용자의 변덕에 데이터베이스가 열리고이 날과 나이를 절대로 사용해서는 안됩니다. 수없이 많은 웹 사이트가 손상되어 데이터가 손상되었습니다. 당시에는 잘못 생각한 사이트 였지만 지금은 더 잘 알고 있습니다. 변명의 여지가 없습니다.

관련 문제