2012-10-21 3 views
0

중복 키 업데이트 SQL 문과 함께 MySQL 데이터베이스에 gridview 데이터를 삽입 할 수있는 코드를 만드는 데 어려움이 있습니다.gridview를 사용하여 매개 변수를 사용하여 매개 변수를 사용하여 "중복 키 업데이트"에서

gridview는 찾아보기 및 업로드 버튼에 연결된 일반 gridview입니다. 이렇게하면 데이터 표가 아닌 gridview에 스프레드 시트를 업로드 할 수 있습니다.

나는 VB에서 이것을했지만 vb.net에서 쓰는 힘든 작업을 찾고있다. 다음은 VB 코드입니다.

Dim connectionString As String = "Server=*****;Database=****;Uid=****;Pwd=r*****;allow user variables=true" 
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
     Handles Button2.Click 

    Dim i As Integer = 0 
    Dim student id,name,age,adress dbSQL_query As String 
    Dim dbSQL_cmd As New SqlClient.SqlCommand 
    Dim dbSQL_con As New SqlClient.SqlConnection 




    Using SQLConnection As New MySqlConnection(connectionString) 

     SQLConnection.Open() 

     For i = 0 To DataGridView1.RowCount - 1 
      Using sqlCommand As New MySqlCommand() 
       student id = DataGridView1.Item(0, i).Value.ToString 
       name = DataGridView1.Item(1, i).Value.ToString 
       age = DataGridView1.Item(2, i).Value.ToString 
       adress = DataGridView1.Item(3, i).Value.ToString.ToLower 
       dbSQL_query = "INSERT INTO student) VALUES (" + addQoute(student_id) + ", " + _ 
         addQoute(name) + ", " + _ 
         addQoute(age) + ", " + _ 
         addQoute(adress) + ", " + _ 

         addQoute(status) + ") on duplicate key update name=(" + addQoute(name) + "),age=(" + addQoute(age) + "),adress=(" + addQoute(adress) + ")" 
       With sqlCommand 

        .CommandText = dbSQL_query 
        .Connection = SQLConnection 
        .CommandType = CommandType.Text 

       End With 
       sqlCommand.ExecuteNonQuery() 
       dbSQL_cmd = New SqlClient.SqlCommand(dbSQL_query, dbSQL_con) 


      End Using 

     Next 



     'MessageBox.Show(DataGridView1.RowCount & " student details has been inserted") 
     SQLConnection.Close() 
    End Using 

End Sub 



Public Function addQoute(ByVal str As String) As String 
    str = Trim(str) 
    Return "'" + str + "'" 
End Function 

답변

0

나는 MySQL의 객체를 사용하고 (발견되지 필드 상태 제외) 각각의 값에 대한 MySqlParameter를 추가하는 코드를 변경했습니다.

Dim i As Integer = 0 
Dim student_id,name,age,adress, dbSQL_query As String 
Dim dbSQL_cmd As MySqlCommand 
Dim dbSQL_con As MySqlConnection 

Using dbSQL_con As New MySqlConnection(connectionString) 
    dbSQL_con.Open() 

    For i = 0 To DataGridView1.RowCount - 1 
     Using dbSQL_cmd As New MySqlCommand() 
      student_id = DataGridView1.Item(i, 0).Value.ToString 
      name = DataGridView1.Item(i, 1).Value.ToString 
      age = DataGridView1.Item(i, 2).Value.ToString 
      adress = DataGridView1.Item(i, 3).Value.ToString.ToLower 
      dbSQL_query = "INSERT INTO student VALUES (?id, ?name, ?age, ?adress) " + 
        " on duplicate key update name=(name=?name, age=?age, adress=?adress)" 
      With dbSQL_cmd 
       .Parameters.AddWithValue("?id", student_id) 
       .Parameters.AddWithValue("?name", name) 
       .Parameters.AddWithValue("?age", age) 
       .Parameters.AddWithValue("?adress", adress) 
       ' .Parameters.AddWithValue("?status", ?????) 
       .CommandText = dbSQL_query 
       .Connection = dbSQL_con 
       .CommandType = CommandType.Text 
      End With 
      dbSQL_cmd.ExecuteNonQuery() 
     End Using 
    Next 
    'MessageBox.Show(DataGridView1.RowCount & " student details has been inserted") 
End Using 

문자열을 사용하여 SQL 명령을 생성하지 마십시오. 항상 매개 변수를 사용하십시오.
코드가 Sql Injection Attacks을 만드는 데 사용될 수 있으므로 AddQuote와 같은 sql 구분 기호에 대한 문자열을 구문 분석하기위한 특수 함수를 작성할 필요가 없기 때문에 이는 중요합니다.

마지막으로 using 문은 SqlCommand 및 SqlConnection과 같은 IDisposable 인터페이스를 구현하는 개체를 삭제합니다. 삭제 프로세스에서 MySqlConnection은 자동으로 닫힙니다.

+0

거기에 얼마나 많은 studeen이 업데이트로 들어갔고 몇 명이 새로운 항목인지 보여주는 msgbox를 얻을 수있는 방법이 있습니까? – user1712552

관련 문제