2013-03-07 33 views
7

Iam new to asp.net membership &我需要幫助以編程方式更改其連接字符串。更改成員資格連接字符串

我已經試過到目前爲止是

我創建了一個類項目名稱,樣品名稱空間**,並延長了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); 
     } 
    } 
} 

和改變網絡配置文件會員標記爲

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

and while r統一web應用程序項目我改變的連接字符串不會被改變?

等待您寶貴的答覆和意見

+1

出於好奇,你爲什麼需要這樣做? – Alyce 2013-03-07 07:40:06

+0

@Alyce我的工作是爲該表創建用戶並根據用戶輸入數據庫內的數據庫運行命令 – GowthamanSS 2013-03-07 07:46:54

+1

嗨,試試這個鏈接可能對你有幫助http://forums.asp.net/t/997608。aspx/1/10 – Niventh 2013-03-07 07:57:21

回答

1

什麼,我也對有關問題的網上能找到的這個here

一個更簡單的,儘管有些眉毛籌集解決方案在請求的 生命週期剛剛修改 在供應商的連接字符串足夠早:

 private void SetProviderConnectionString(string connectionString) 
    { 
     var connectionStringField = 
     Membership.Provider.GetType().GetField("_sqlConnectionString", 
        BindingFlags.Instance | BindingFlags.NonPublic); 

     if (connectionStringField != null) 
      connectionStringField.SetValue(Membership.Provider, connectionString); 
    } 

撥打國際長途的Global.asax.cs內 Application_PreRequestHandlerExecute這種方法做這項工作。還沒有太多測試它,但即使有些東西不起作用,這也意味着它需要早些時候完成 。沒有保證,這將與框架的未來版本 一起工作,儘管它很可能會。

因此,可以手動調用'SetProviderConnectionString'方法(在Initialize方法完成後),而不是期望框架在第一次引用Membership.Provider時調用重寫的Initialize方法。

1

您似乎沒有從Initialize重寫中調用base.Initialize。在這種情況下,我感到很驚訝。

在.NET 4中(不知道更早版本),你應該能夠調用base.Initialize之前連接字符串添加到配置集合,如下所示:

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

這避免需要使用反射來訪問私人領域。

+0

工作!謝謝 – thepirat000 2016-08-17 05:44:15