7

Iam は asp.net メンバーシップが初めてで、接続文字列をプログラムで変更するには助けが必要です。

私が今まで試したことは、

クラス プロジェクト名 Sample を名前空間 ** として作成し、System.Web.Security.SqlMembershipProvider

コードとして

namespace Sample
{
    public class Connectionstring : SqlMembershipProvider
    {
        public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
        {
            string connectionString = "server=xx.xx.xx;database=db;user id=un;password=pwd";    

           // Set private property of Membership provider.  
           FieldInfo connectionStringField = GetType().BaseType
                     .GetField("_sqlConnectionString", BindingFlags.Instance |
                                                       BindingFlags.NonPublic);
           connectionStringField.SetValue(this, connectionString);
        }
    }
}

メンバーシップタグのWeb構成ファイルを次のように変更しました

<membership defaultProvider="SQLMembershipProvider">
  <providers>
    <add name="SQLMembershipProvider" type="sample.Connectionstring,sample" connectionStringName="SQLMembershipConnString" applicationName="@@@@@@@" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" />
  </providers>
</membership>

Webアプリケーションプロジェクトの実行中に、変更している接続文字列が変更されませんか?

貴重なご意見・ご感想をお待ちしております

4

3 に答える 3

2

オーバーライドbase.Initializeから呼び出しているようには見えません。Initializeこの場合、何でもうまくいくことに驚いています。

base.Initialize.NET 4 (以前のバージョンについては不明) では、次のように呼び出す前に、構成コレクションに接続文字列を追加できるはずです。

public override void Initialize(string name, NameValueCollection config)
{
    config["connectionString"] = ... whatever ...;
    base.Initialize(name, config);
}

これにより、リフレクションを使用してプライベート フィールドにアクセスする必要がなくなります。

于 2015-10-21T19:03:39.120 に答える
1

Web 構成で接続文字列を使用しない理由は何ですか?

通常、Web サーバーは、個々のユーザーの資格情報ではなく、Web サーバーの資格情報を使用してデータベースにアクセスします。

これは、asp.net 認証の一般的なセットアップ ガイドです。 http://vstudiojourney.blogspot.com/2008/06/choosing-another-database-for.html

于 2013-03-26T23:48:01.830 に答える