2015-05-25 2 views
0

Я хотел бы просмотреть все таблицы в базе данных и удалить все строки с определенным идентификатором. Когда количество строк меньше, оно работает нормально.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 (..)' Statement, добавьте блок 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 
Смежные вопросы