Что вызывает ошибку «операция на неблокирующем сокете будет заблокирована» в mssql?

ОШИБКА: запрос исключения: "СОЗДАТЬ НЕКЛАССНЫЙ ИНДЕКС [I1] НА AllAccounts_BAK ( [Master_received_Day] ASC ) 'с исключением Произошла одна или несколько ошибок. ОШИБКА: внутреннее исключение исключения. Невозможно прочитать данные из транспортного соединения: операция на неблокирующем сокете будет заблокирована.

Вот код на C#, который выполняет этот запрос:

private void ExecuteQuery(string qStr)
{
    using (SqlConnection cnx = new SqlConnection(_ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand(qStr, cnx))
        {
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

Строка подключения проверяется непосредственно перед запросом, чтобы убедиться, что она установит соединение, получая две строки данных. Никто другой не использует базу данных. Запрос был протестирован в консоли операций SQL, и он работает. Это TCP-соединение с базой данных Azure. Я загружал данные и выполнял запросы, используя такой код. Что вызывает такого рода ошибку?

Можете ли вы обновить свой вопрос, чтобы он содержал полную репродукцию?

David Browne - Microsoft 13.09.2018 20:58
2
1
3 298
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, помимо тайм-аутов соединения и тайм-аутов удаленного соединения, есть еще одно, которое я нашел похороненным в недрах документации MS. Если в моем примере заменить две строки, выполняющие открытие и выполнение, на:

  cmd.Connection.Open();
  cmd.CommandTimeout = 0; // 0 sets it so the "command" doesn't time out!
  cmd.ExecuteNonQuery();

После добавления этой строки все работает нормально! Я удивлен, что об этом не говорится более явно. Если бы кто-то мог это объяснить, было бы здорово!

Другие вопросы по теме