#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 .