2015-05-25 73 views
0

我想查看數據庫中的所有表,並刪除具有特定ID的所有行。當行數較小時,它工作正常。ExecuteNonQuery不刪除時,它不得不刪除大量的行

在一個特定的表中,行數是900000,這不起作用了。

這裏是我當前的代碼:

Using connection = New MySqlConnection(connectionString) 
    Try 
     connection.open() 
     If listOfTables.Count > 0 Then 
      For Each table As String In listOfTables 
       Dim sqlc As String = "DELETE FROM " & dbConnection.DbName & "." & table & " WHERE id=" & cNumber& ";" 

       Dim command3 As New MySqlCommand(sqlc , connection) 
       command3.ExecuteNonQuery() 
       command3.Dispose() 
      Next 
      connection.close() 
     End If 
    Catch ex As Exception 

    End Try 

End Using 
+0

您是否發現異常?另外,你的'Connection.Open()'在'If'之外,但是'Connection.Close()'在'If'之內。 –

+0

添加一些'Debug.WriteLine(..)'語句,添加一個finally塊來關閉連接,並打印出可能發生的任何異常。之後讓我們知道你發現了什麼。 –

回答

1

刪除900000排在一次從表不是一個好主意。你爲什麼不在MYSQL中編寫一個存儲過程來完成你的工作。您可以嘗試創建存儲過程,該過程刪除循環中1000行的塊中的記錄,並且不會停止,直到刪除所有行。

試試下面的僞代碼:

@counter = 0 
LOOP 
    DELETE FROM Table_name 
     WHERE id BETWEEN @counter AND @counter +1000 
     AND "Your conditions" 
    SET @counter = @counter + 1000 
    sleep 2 -- Take a sleep before next 
    UNTIL end of table 

它使用ID列具有自動增量

0

我提供有關存儲過程迴路上面的回答同意主鍵。 但是,如果您遇到錯誤/異常或超時,您從未提及過。 也許您應該:

Catch ex As Exception 
    MessageBox.Show(ex.Message) 
    connection.close() 
End Try