必须删除大量行时,ExecuteNonQuery不会删除

时间:2015-05-25 16:09:26

标签: mysql vb.net

我想查看数据库中的所有表并删除具有特定id的所有行。当行数较小时,它可以正常工作。

在特定的表格中,行数为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

2 个答案:

答案 0 :(得分: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列作为具有自动增量的主键

答案 1 :(得分:0)

我同意上面关于存储过程循环的回答。 但是,您从未提及是否收到错误/异常,或者它是否超时。 也许你应该:

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