[ASP.NET] 將Membership的Provider由ASPNETDB.MDF轉到SQL Server

摘要:[ASP.NET] 將Membership的Provider由ASPNETDB.MDF轉到SQL Server

以前有玩一下.NET內建的User和Role,

他會在你的專案下建一個App_Data資料夾,並在裡面建立一個 ASPNETDB.MDF的資料檔,

以前總覺得雖然方便,但是彈性實在不夠,所以很少使用,

前陣子想說把他轉移SQL Server中也許可以提高他的彈性,

所以我就用Visual Studio 的命令提示字元在SQL Server中建立資料檔 (參考),會在你的SQL Server中建立預設的資料庫ASPNETDB 

 

然後在Web.config上面做一些修改,首先在ConnectionString上加上

<connectionStrings> 
    <add name="myuserASPNET_conndb" connectionString="Data Source=xxxx;Initial Catalog=aspnetdb;User ID=xxx;Password=xxx;Min Pool Size=10;Max Pool Size=1000;Pooling=false;Connect Timeout=45;" providerName="System.Data.SqlClient" /> 
 </connectionStrings>

 一樣在Web.config的  <system.web> 中設定MemberShip的Provider(參考)

  <membership> 
    <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"  
      connectionStringName="myuserASPNET_conndb"  
      enablePasswordRetrieval="false"  
      enablePasswordReset="true"  
      requiresQuestionAndAnswer="true"
      applicationName="/"  
      requiresUniqueEmail="false"  
      passwordFormat="Hashed"  
      maxInvalidPasswordAttempts="5"  
      minRequiredPasswordLength="3"  
      minRequiredNonalphanumericCharacters="1"  
      passwordAttemptWindow="10"  
      passwordStrengthRegularExpression=""
     />
      </providers>
  </membership>

 然後在頁面使用CreateUserWizard 控制項來測試

html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>User Test</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:CreateUserWizard ID="CreateUserWizard1" runat="server" BackColor="#F7F7DE"  
            BorderColor="#CCCC99" BorderStyle="Solid" BorderWidth="1px"  
            Font-Names="Verdana" Font-Size="10pt">
            <SideBarStyle BackColor="#7C6F57" BorderWidth="0px" Font-Size="0.9em"  
                VerticalAlign="Top" />
            <SideBarButtonStyle BorderWidth="0px" Font-Names="Verdana"  
                ForeColor="#FFFFFF" />
            <ContinueButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC"  
                BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana"  
                ForeColor="#284775" />
            <NavigationButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC"  
                BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana"  
                ForeColor="#284775" />
            <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF"  
                HorizontalAlign="Center" />
            <CreateUserButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC"  
                BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana"  
                ForeColor="#284775" />
            <TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
            <StepStyle BorderWidth="0px" />
            <WizardSteps>
                <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
                </asp:CreateUserWizardStep>
                <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
                </asp:CompleteWizardStep>
            </WizardSteps>
        </asp:CreateUserWizard>
    </div>
    </form>
</body>
</html>

沒意外的話應該會有錯誤訊息"'System.Web.Security.SqlMembershipProvider' 必須有與結構描述版本 '1' 相容的資料庫結構描述。但是,目前的資料庫結構描述與這個版本不相容。您可能需要安裝具有 aspnet_regsql.exe (可於 framework 安裝目錄中找到) 的相容結構描述,或者將提供者升級為更新的版本",如下

 這問題是因為在Provider中的applicationName="/" 少了一個名稱,你可以命名你的名稱例如applicationName="/websiteUser",

但加上仍然會有錯誤訊息告訴你少了一個Procedure,

所以先把剛剛在資料庫中建立的aspnetdb刪掉,然後在Visual Studio 的命令提示字元輸入 "aspnet_regsql.exe"

接下來就依造下面的方式設定:

按完下一步後,就可以完成了,然後我們再重新整理頁面,就可以新增USER成功

然後看看資料庫中是否有資料