2017-12-29 8 views
-1

올바른 ID를 입력하면 과 TextChanged 이벤트가 잘 작동합니다. 그러나 잘못된 ID를 입력하고 MessageBox이 catch 섹션에 나타나면 올바른 ID를 입력하려고 시도하면 MessageBox 오류가 계속 발생합니다.TextChanged 이벤트가있는 텍스트 상자에 날짜가 입력되지 않습니다.

private void Pro1txt_onChange(object sender, EventArgs e) 
{ 
    try 
    { 
     cmd1 = new SqlCommand(" SELECT P_Name,P_Price,P_Quantity from Product where P_ID = '" + Pro1txt.Text + "'", cn); 
     cn.Open(); 
     DataReader = cmd1.ExecuteReader(); 
     DataReader.Read(); 
     ProdcutName1.Text = DataReader["P_Name"].ToString(); 
     UnitPrice1.Text = DataReader["P_Price"].ToString(); 
     Rem_Quantity1.Text = DataReader["P_Quantity"].ToString(); 

     if (Rem_Quantity1.Text =="0") 
     { 
      Req_Quantity1.Enabled = false; 
     }    
    } 
    catch 
    { 
     MessageBox.Show("Error","danget",MessageBoxButtons.OK,MessageBoxIcon.Hand);    
    } 
} 

답변

2

쿼리는 SQL Injection에 취약합니다. 당신의 DB 연결을 닫습니다 마지막으로 사용 ..

cmd1 = new SqlCommand(" SELECT P_Name,P_Price,P_Quantity from Product where P_ID = @id", cn); 
cmd1.Parameters.Clear(); 
cmd1.Parameters.Add("@id", SqlDbType.Int).Value = int.Parse(Pro1txt.Text); 
cn.Open(); 
.... 

을하고 catch 블록에서 메시지 박스를 포함하지 않으려 : 당신은 예를 들어 Parameters

를 사용해야합니다.

자세한 내용은 매개 변수가있는 검색어를 검색하십시오.

+0

빅 감사합니다. – AzzaM

+0

Small Quation 테이블의 열을 텍스트 상자로 가져오고 싶습니다. – AzzaM

+0

"cn.Open();"다음에 나오는 코드를 사용하십시오. – TraxX

0

일단 가장 중요한 :

여기 내 코드이 코드는 SQL 주입에 취약합니다.

그런 다음 빠른 해결책을 제공하십시오. catch 블록에 대화 상자를 표시하지 마십시오. 응용 프로그램 상태를 나타내는 전역 플래그를 설정합니다. 그런 다음 해당 플래그를 사용하여 메시지를 표시하거나 표시하지 않습니다.

+0

자세한 설명 내 친구 나는 당신을 이해하지 못합니다. – AzzaM

+0

위의 코드에서 SQL 주입을 피하는 방법. – AzzaM

관련 문제