Bezdepbonusu7Программирование: статьи и ответы

Вопрос

SqlBulkCopy.BulkCopyTimeout свойство

Автор вопроса: George2Ответов: 4

Я использую VSTS 2008 + C # + .Net 3.5 + ADO.Net для разработки консольного приложения для копирования с массовой вставкой.

Я хочу использовать как пакетную массовую вставку, так и свойство тайм-аута массовой вставки. Что касается свойства BulkCopyTimeout, я сбит с толку и хочу знать, применяется ли оно ко всей массе или только к каждой партии массы?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx

заранее спасибо, Джордж

sql-server-2008bulkinsert

Ответы

Ответ 1 · рейтинг 9 · marc_s

Поиск и чтение некоторых сообщений в блогах и форумах в Интернете, похоже, указывает на то, что SqlBulkCopyTimeout действительно применяется не ко всей операции, а к каждому пакету в операции.

Документы MSDN не совсем ясны по этому поводу, но большинство сообщений, похоже, указывают на то, что тайм-аут применяется к пакету. Уменьшение размера пакета и / или увеличение SqlBulkCopyTimeout в большинстве случаев кажется решением проблемы тайм-аута.

См. В качестве примера сообщение на форуме .

Марк

Ответ 2 · рейтинг 4 · Abdul Saboor

BulkCopyTimeout: по умолчанию 30 секунд.

sqlBulkCopy.BulkCopyTimeout = {time in seconds for one batch}

BatchSize: по умолчанию весь источник данных - это один пакет

sqlBulkCopy.BatchSize  = {no of rows you want to insert at once}

Для получения дополнительных сведений см. Эту ссылку: Истекло время ожидания с SqlBulkCopy

Мы получаем это исключение "Истекло время ожидания". если приложению не удалось вставить источник данных в течение 30 секунд.

Ответ 3 · рейтинг 2 · Mike Two

Это касается всей операции для одной партии. Вы также должны убедиться, что тайм-аут для ваших подключений установлен. Раньше я использовал тайм-аут, установил его для массового копирования и на собственном опыте выяснил, что тайм-аут соединения тоже имеет значение.

Кажется, забавная концепция всей операции. Если в любой момент он будет ждать больше тайм-аута, он завершится ошибкой. Другими словами, если чтение пакета занимает больше тайм-аута, оно завершится ошибкой, но если сумма всех чтений> тайм-аута, все в порядке. Если запись пакета занимает слишком много времени, она также завершится ошибкой.

Но кажется, что это партия за партией, а не целиком.

Ответ 4 · Samuel L

Нелегко найти идеальный тайм-аут для массового копирования; если вы выберете небольшой тайм-аут, вам не следует выбирать большой размер пакета, поскольку могут возникнуть ошибки тайм-аута. С другой стороны, если вы решите выбрать небольшой размер пакета, у вас меньше шансов получить ошибку тайм-аута с сервера; однако вы не в безопасности.

Я рекомендую установить неограниченное время ожидания, а именно (sqlBulkCopy.BulkCopyTimeout = 0), и попытаться выбрать значительный размер пакета для массового копирования. По крайней мере, у вас не может быть исключения тайм-аута.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы