2013-03-07 3 views
7

Iam new to asp.net membership & Мне нужна помощь в программном изменении строки подключения.Изменение строки подключения соединения

То, что я пытался до сих пор

У меня есть создать имя проекта класса 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); 
     } 
    } 
} 

и измененный веб-конфигурационный файл в членский знак как

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

и while r unning проект веб-приложения, строка подключения, которую я меняю, не изменяется?

ждет ваши ценные ответы и комментарии

+1

Из любопытства, зачем вам это нужно? – Alyce

+0

@Alyce моя задача - создать пользователей для этой таблицы и запустить команду на основе пользователя, входящего в базу данных. – GowthamanSS

+1

привет, эта ссылка может помочь вам http://forums.asp.net/t/997608.aspx/1/10 – Niventh

ответ

1

По какой причине вы не используете строку подключения в веб-конфигурации?

Обычно веб-сервер будет обращаться к базе данных с использованием учетных данных веб-сервера, а не учетных данных отдельного пользователя.

Это общее руководство по настройке для аутентификации asp.net. http://vstudiojourney.blogspot.com/2008/06/choosing-another-database-for.html

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), вместо того, чтобы ожидать, что инфраструктура вызовет перезаписанный метод Initialize, когда в первый раз ссылается на Memberhip.Provider.

1

Возможно, вы не вызываете base.Initialize с вашего Initialize. Я удивлен, что в этом случае все работает.

В .NET 4 (не уверен о более ранних версиях), вы должны быть в состоянии добавить строку подключения к сборнику конфигурации перед вызовом base.Initialize следующим образом:

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

Это позволит избежать необходимости использовать отражение для доступ к частному полю.

+0

, который работает! благодаря – thepirat000

Смежные вопросы