Я использую VSTS 2008 + C # + .Net 3.5 + ADO.Net для разработки консольного приложения для копирования с массовой вставкой.
Я хочу использовать как пакетную массовую вставку, так и свойство тайм-аута массовой вставки. Что касается свойства BulkCopyTimeout, я сбит с толку и хочу знать, применяется ли оно ко всей массе или только к каждой партии массы?
Поиск и чтение некоторых сообщений в блогах и форумах в Интернете, похоже, указывает на то, что 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}
Мы получаем это исключение "Истекло время ожидания". если приложению не удалось вставить источник данных в течение 30 секунд.
Ответ 3 · рейтинг 2 · Mike Two
Это касается всей операции для одной партии. Вы также должны убедиться, что тайм-аут для ваших подключений установлен. Раньше я использовал тайм-аут, установил его для массового копирования и на собственном опыте выяснил, что тайм-аут соединения тоже имеет значение.
Кажется, забавная концепция всей операции. Если в любой момент он будет ждать больше тайм-аута, он завершится ошибкой. Другими словами, если чтение пакета занимает больше тайм-аута, оно завершится ошибкой, но если сумма всех чтений> тайм-аута, все в порядке. Если запись пакета занимает слишком много времени, она также завершится ошибкой.
Но кажется, что это партия за партией, а не целиком.
Ответ 4 · Samuel L
Нелегко найти идеальный тайм-аут для массового копирования; если вы выберете небольшой тайм-аут, вам не следует выбирать большой размер пакета, поскольку могут возникнуть ошибки тайм-аута. С другой стороны, если вы решите выбрать небольшой размер пакета, у вас меньше шансов получить ошибку тайм-аута с сервера; однако вы не в безопасности.
Я рекомендую установить неограниченное время ожидания, а именно (sqlBulkCopy.BulkCopyTimeout = 0), и попытаться выбрать значительный размер пакета для массового копирования. По крайней мере, у вас не может быть исключения тайм-аута.