2011-05-04 7 views
0

이 VB 코드를 기반으로 모든 SQL 데이터베이스 내에서 올바르게 만들 수 있지만 Food_ID가 txtfoodid에 표시되는 대신 메시지 상자에 표시됩니다 (Try/Catch 때문이라고 생각합니다.)).텍스트 상자가 올바르게 표시되지 않음

Dim con As New OleDbConnection(DBcon) 
    Try 
     Dim dr As OleDbDataReader 
     Dim command As New OleDbCommand("Insert into Donation (Donor_ID) VALUES (" & txtDonNum.Text & "); Select @@Identity;") 

     con.Open() 
     command.Connection = con 
     dr = command.ExecuteReader 
     Dim Donation_ID As String = "" 
     If dr.Read() Then 
      Donation_ID = dr(0).ToString 
      Dim food As New OleDbCommand("Insert into Food_Donation (Date_Received, Donation_ID) Values ('" & maskedreceived.Text & "', " & Donation_ID & "); Select @@Identity") 
      food.Connection = con 
      dr = food.ExecuteReader() 
      'food.ExecuteNonQuery() 
     End If 
     Dim Food_ID As String 
     If dr.Read() Then 
      Food_ID = dr(0).ToString 
      txtfoodid.Text = dr("Food_ID").ToString 
     End If 

    Catch ex As Exception 

     MessageBox.Show(ex.Message) 
    Finally 
     con.Close() 
    End Try 

    MessageBox.Show("Food_ID has been made.") 

End Sub 

여러 가지 방법으로 표시하려고했지만 지금까지 아무 것도 작동하지 않았습니다.

답변

1

열 txtfoodid.Text = dr ("Food_ID")을 참조하고 있습니다. ToString은 아니지만 Select 문은 @@ Identity 만 반환합니다.

해당 판독기에서 반환 된 Food_ID 열이 없습니다. 자신의 독자로 새 Select 쿼리를 만들거나 Food_ID 열을 반환하도록 두 번째 문을 수정하십시오.

은 또한 여기에 코드의 공격 SQL 주입 유형에 매우 취약이며 대부분은 바로 Stop Sql Injection Attacks Before They Stop You

0

펩토를 읽고 추천 할 것입니다. 유일한 정보는 필요한 정보입니다. 기본적으로, 단지

txtfoodid.Text = Food_ID 

이 줄

txtfoodid.Text = dr("Food_ID").ToString 

을 변경하고 당신은 갈 수있을 것입니다. DataReader를 이미 가져 와서 Food_ID 변수에 할당하면 Food_ID를 읽으려고합니다.

관련 문제