2017-04-13 62 views
0

我的代碼從數據表插入數據到Mysql表,但是過程需要很長時間。無論如何,我可以修改我的方法來創建我的datable值的「One shoot insert」嗎?在交易中也會很好。謝謝。從數據表插入數據到MySql表

Dim result As Boolean = False 
     Dim MysqlConn As MySqlConnection 
     MysqlConn = New MySqlConnection() 
     MysqlConn.ConnectionString = "Server=localhost;Database=duo;Uid=root;Pwd=pass1;" 
     Using con As New MySqlConnection(MysqlConn.ConnectionString) 

      For Each r As DataRow In _dtSir.Rows 

       Using cmd As New MySqlCommand("INSERT INTO " & _serializer.GetTableName(_reportId) & " (SR, IDcol, System) 
               VALUES (@SR, @IDcol, @System)", con) 

        cmd.CommandType = CommandType.Text 
        cmd.Parameters.AddWithValue("@SR", r("SR#")) 
        cmd.Parameters.AddWithValue("@IDcol", CInt(r("ID"))) 
        cmd.Parameters.AddWithValue("@System", r("System")) 

        If Not con.State = ConnectionState.Open Then 
         con.Open() 
        End If 

        cmd.ExecuteNonQuery() 
        result = True 
       End Using 
      Next 

     End Using 

     Return result 
    End Function 
+0

由於'_dtSir'似乎是一個DataTable的幾件事情,不需要任何該代碼。使用DataAdapter一次更新/插入所有新行。 – Plutonix

回答

0

試試這個,看看快:

Public Function test() 
    Dim result As Boolean = False 
    Using con As New MySqlConnection("Server=localhost;Database=duo;Uid=root;Pwd=pass1;") 
     con.Open() 
     For Each row As DataRow In_dtSir.Rows 
     Using cmd = con.CreateCommand() 
       cmd.CommandType = CommandType.Text 
       cmd.CommandText = "INSERT INTO " & _serializer.GetTableName(_reportId) & " (SR, IDcol, System) VALUES ('" & row("SR#") & "', '" & CInt(row("ID")) & "','" & row("System") & "'", con) 
       cmd.Connection = con 
       cmd.ExecuteNonQuery() 
       result = True 
      End Using 
     Next 
     con.Close() 
     SqlConnection.ClearPool(con) 
    End Using 
    Return result 
End Function 

有可能是調整,因爲我從來沒有使用過的MySqlConnection

+0

不幸的是它不是;噸;/ – Dino

+0

你有多少行? – Mederic

+0

50000左右,應該有其他選項,而不是循環每一行。 – Dino