2013-03-07 18 views
7

Iam new to asp.net membership & Ho bisogno di aiuto per cambiare la stringa di connessione a livello di programmazione.Modifica della stringa di connessione di appartenenza

Quello che ho cercato fino ad ora è

Ho creare un campione nome di progetto di classe come spazio dei nomi ** e si estende il codice System.Web.Security.SqlMembershipProvider

come

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

e alterato file di configurazione web tag appartenenza come

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

e mentre r disattivando il progetto dell'applicazione web, la stringa di connessione che sto modificando non viene alterata?

in attesa per le vostre risposte e commenti

+1

Per curiosità, perché hai bisogno di fare questo? – Alyce

+0

@Alyce il mio lavoro è creare utenti per quella tabella ed eseguire il comando in base all'utente che entra nel database – GowthamanSS

+1

ciao prova questo link potrebbe esserti d'aiuto http://forums.asp.net/t/997608.aspx/1/10 – Niventh

risposta

1

Per quale ragione di valore non stai utilizzando una stringa di connessione nella configurazione web?

In genere il server Web accede al database utilizzando le credenziali del server Web, non le credenziali di un singolo utente.

Questa è una guida di installazione generica per l'autenticazione asp.net. http://vstudiojourney.blogspot.com/2008/06/choosing-another-database-for.html

1

quello che ho trovato anche in rete su problema è questo here:

Una più semplice, anche se un po soluzione sopracciglio di sensibilizzazione è solo modificando la stringa di connessione nei provider abbastanza presto nel ciclo di vita del richiesta :

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

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

chiamata a questo metodo da Global.asax.cs all'interno Application_PreRequestHandlerExecute fa il lavoro. Non l'ho provato con lo troppo, ma anche se qualcosa non funziona, significa solo che è necessario che sia fatto prima. Non ci sono garanzie che funzionerà con le versioni future del framework, anche se molto probabilmente lo farà.

Quindi, il metodo 'SetProviderConnectionString' può essere chiamato manualmente (dopo che il metodo Initialize è terminato), invece di aspettarsi che il framework invochi il metodo di inizializzazione sovrascritto quando si fa riferimento a Membership.Provider per la prima volta.

1

Non sembra che chiami base.Initialize dall'override Initialize. Sono sorpreso che tutto funzioni in questo caso.

In .NET 4 (non sono sicuro circa le versioni precedenti), si dovrebbe essere in grado di aggiungere la stringa di connessione alla collezione di configurazione prima di chiamare base.Initialize come segue:

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

Questa evitare la necessità di utilizzare la reflection per accedere a un campo privato.

+0

che funziona! Grazie – thepirat000

Problemi correlati