ASP.NETMVCアプリケーションでカスタムメンバーシッププロバイダーを使用しています。「System.InvalidOperationException-このコマンドに関連付けられた開いているDataReaderがすでに存在し、最初に閉じる必要があります」という断続的な問題が発生しています。クラスに問題があるので、MARSを有効にすることにしました。
これは、Web構成の接続文字列です...
<add name="CustomMembershipServices" connectionString="User ID=CUSTOM_USER;Password=pwd;Database=OUR_DB;Server=.\SQLEXPRESS;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
このコードは、次の行にArgumentException:キーワードがサポートされていません:'multipleactiverecordsets'をスローするようになりました。
protected void CreateAndOpenConnection()
{
// Exception thrown here...
_connection = new SqlConnection(_connectionString);
_connection.Open();
}
SQL2005ExpressおよびSQL2008Standardエディションを対象とする場合にも、同じ例外が発生します。助言がありますか?
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;
}
これが同じ接続上に複数のデータリーダーを作成する理由はわかりません。