Мы используем пользовательский членский член в приложении ASP.NET MVC. Мы испытывали периодическое 'System.InvalidOperationException - уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт сначала. проблемы с классом, поэтому я решил включить MARS.
Это строка подключения в веб-конфигурации ...
<add name="CustomMembershipServices" connectionString="User ID=CUSTOM_USER;Password=pwd;Database=OUR_DB;Server=.\SQLEXPRESS;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
Наш код теперь выдает исключение ArgumentException: ключевое слово не поддерживается: «множественные активные записи» в следующей строке.
protected void CreateAndOpenConnection()
{
// Exception thrown here...
_connection = new SqlConnection(_connectionString);
_connection.Open();
}
То же исключение наблюдается при нацеливании на версии SQL2005 Express и SQL2008 Standard. Есть предложения?
В ответ на AdaTheDev вот метод, который использует устройство чтения данных ...
public bool CheckUserPassword(long userID, string password)
{
bool success = false;
if (!string.IsNullOrEmpty(password))
{
try
{
CreateAndOpenConnection();
using (SqlCommand cmd = CreateSqlCommandForStoredProcedure("CheckPassword"))
{
IPasswordUtility generator = new PasswordUtility();
cmd.Parameters.AddWithValue("UserID", userID);
cmd.Parameters.AddWithValue("Password", generator.HashPassword(password));
using (SqlDataReader reader = cmd.ExecuteReader())
{
success = reader.HasRows;
reader.Close();
}
}
}
finally
{
CloseConnection();
}
}
return success;
}
Я не вижу причин, по которым это может привести к созданию нескольких считывателей данных в одном соединении.