1

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;
}

これが同じ接続上に複数のデータリーダーを作成する理由はわかりません。

4

2 に答える 2

2

この問題は、ASP.NET プロバイダー フレームワークがクラ​​スを静的シングルトンとして扱っていることが原因です ...

「質問: 非静的クラスが静的になるのはいつですか?」

于 2010-02-24T14:09:34.453 に答える
2

機能上の理由で MARS が実際に必要でない限り、根本的な問題に焦点を当てることをお勧めします。クラスの期待/意図された動作は、単一の接続に対して複数のデータリーダーを開かないことのように聞こえます (そして、私は間違っている可能性があります)。同時に。

その場合は、同じ接続で別のデータリーダーを開く前に、データリーダーが適切に閉じられていることを確認する必要があります。これが行われていない状況があるようです。回避策として MARS を使用しても、何かが適切に閉じられていないという事実が残ります。

編集 1: datareaders などをクリアするという点では、そのコードは問題ないように見えます。(私はこれが事実であることを疑っています)。データリーダーを閉じていないクラスに他のメソッドはありますか?

于 2010-02-24T09:41:27.710 に答える