Две вещи. Во-первых, как узнать, что команда INSERT для базы данных выполняется в контексте первой процедуры? Я не вижу там ничего, что заставило бы изменения вернуться в базу данных. Получаете ли вы необработанное исключение с дампом стека, который показывает, что оно было вызвано из этой подпрограммы (но еще не обработано)? В противном случае, я бы сказал, что есть хороший шанс, что INSERT не будет выполнен до некоторого времени после этой процедуры.
Во-вторых, мне кажется, что DataGridView1_DataError все равно устранит ошибку. Я полагаю, что событие _DataError будет вызвано до того, как оно вернется к коду, который вызвал выполнение INSERT, и что «e.ThrowException = False» настроено для предотвращения любого повторного распространения исключения.