2013-03-07 1 views
7

asp.net 멤버십에 익숙하지 않음 & 프로그래밍 방식으로 연결 문자열을 변경하려면 도움이 필요합니다.멤버십 연결 문자열 변경

지금까지 시도 내가 네임 스페이스와 같은 수준의 프로젝트 이름 샘플 **을 만들 수 있습니다

하고

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

및 변경된 웹 설정 파일로 System.Web.Security.SqlMembershipProvider

코드를 확장 한 무엇 회원 태그는

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

으로, 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); 
    } 

이 Application_PreRequestHandlerExecute 내부 Global.asax.cs에서이 메서드를 호출하면 작업을 수행합니다. 을 너무 많이 테스트하지는 않았지만 무언가가 작동하지 않더라도 이전에 수행해야 할 것이 입니다. 프레임 워크의 향후 버전 에서 작동 할 것이라는 보장은 없지만 가능성은 매우 높습니다.

따라서 Member.Provider가 처음 참조 될 때 프레임 워크가 덮어 쓴 Initialize 메서드를 호출하는 대신 Initialize 메서드가 완료된 후 'SetProviderConnectionString'메서드를 수동으로 호출 할 수 있습니다.

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