Тайм-аут соединения при попытке получить всех пользователей

#c# #asp.net #linq #asp.net-membership

#c# #asp.net #linq #asp.net-членство

Вопрос:

Я пытаюсь собрать всех пользователей в базе данных с примерно 200 тыс. хранилищ данных. Я пытаюсь преобразовать их пароли, но я сталкиваюсь с таймаутом при получении пользователей, использующих.GetAllUsers() . Ниже приведен код.

 var encrypted = Membership.Providers["EncryptedProvider"];
        var hashedProvider = Membership.Providers["HashedProvider"];
        int dontCare = 0;
        if (encrypted == null || hashedProvider == null)
            return;
        var passwords = encrypted
            .GetAllUsers(0, int.MaxValue, out dontCare)
            .Cast<MembershipUser>()
            .Where(u => u.IsLockedOut == false amp;amp; u.IsApproved == true)
            .OrderByDescending(u => u.CreationDate)
            .GroupBy(x => x.UserName)
            .ToDictionary(u => u.Key, y => y.First().GetPassword());
 

Это конкретно указывает здесь.

  var passwords = encrypted
 

Я попытался изменить тайм-аут подключения строки подключения на «0» и «9000» в web.config. Но ошибка все еще сохраняется.

 <add name="ConnectionString" connectionString="Data Source=xxxxx;Initial Catalog=xxxx;User ID=xxx;Password=xxx; Connection Timeout=9000;" providerName="System.Data.SqlClient" />
 

Что-то не так с моей реализацией кода в web.config или в зашифрованном var? Как мне решить эту проблему?

Комментарии:

1. Почему именно ГруппБи?

2. У меня возникла повторяющаяся проблема, поэтому я добавил groupby.

3. Вы уверены, что это тайм-аут соединения ? Если это так, то вы еще не дошли до стадии фактического выполнения вашего запроса, и, следовательно, это не имеет ничего общего с фактическим запросом или количеством транзакций, но, скорее всего, просто ваша строка подключения неверна или ваш доступ к Sql заблокирован. Если это тайм-аут запроса, то ваш параметр connectionstring на это не повлияет.

Ответ №1:

Вы пробовали запускать свой запрос на сервере? Если проблема с тайм-аутом сохраняется и в SQL Server, то почему бы вам не удалить ограничение тайм-аута только на сервере.

Комментарии:

1. Он отлично работает на sql server. Мне не потребовалось много времени, чтобы получить тысячи данных.

2. Скорее всего, проблема связана с вашей строкой подключения. Почему вы в любом случае используете тайм-аут подключения? Это тайм-аут для создания соединения, А НЕ тайм-аут для команд, выполняемых через это соединение. Для этой цели вам необходимо установить тайм-аут команды с помощью SqlCommand. Свойство CommandTimeout .