2016-02-22 3 views
2

Я написал программу для вставки некоторых записей с использованием sqlCopy для более быстрой обработки, а затем код выполняет и обновляет оператор [в другой таблице] на основе вновь вставленных записей.Обновление выполняется до BulkInsert

Проблема в том, что обновление почти всегда выполняется перед вставкой! [около 2 секунд до .. в соответствии с отметками времени строк вставки и обновления.] единственный способ, которым я мог сделать обновление, выполнить после того, как вставка будет содержать спящий код в течение 2-3 секунд. Есть ли более чтобы убедиться, что вставка завершена до того, как код продолжается?

Я даже захватил событие RowsCopied, строки мгновенно скопированы «до» обновления. но в базе данных обновление происходит раньше.

 bulkCopy.WriteToServer(table) 

    Dim Sql = "Update tbl Set Total = (select sum(qty) from Inserttbl where inId = ID)" 
    ExecuteSQL(Sql) 
+0

Вы пытались использовать 'bulkCopy.Options' TableLock ...? – Codexer

+0

Являются ли bulkCopy и ExecuteSQL одним и тем же соединением? Если это так, на основе MSDN это невозможно. Кстати, я проверил пример SqlBulkCopy, и эти коды используют инструкцию «USING». Проверьте это: https://msdn.microsoft.com/en-us/library/ex21zs8x(v=vs.110).aspx – FLICKER

+0

WriteToServer является синхронным. Я предлагаю вам запустить трассировку SQL, чтобы увидеть фактические запросы, отправляемые на SQL Server. –

ответ

1

Обнаружена проблема ... Временная метка вставки была предоставлена ​​клиентом, а временная метка обновления - с сервера. Время клиентов на 2 секунды раньше времени серверов.

Я изменил оба варианта, чтобы использовать функцию getDate для серверов. задача решена.

 Смежные вопросы

  • Нет связанных вопросов^_^