【问题标题】:upload ASPNETDB.mdf to shared hosting?将 ASPNETDB.mdf 上传到共享主机?
【发布时间】:2010-12-15 20:18:40
【问题描述】:

我正在开发 asp.net mvc2 应用程序,我使用使用 ASPNETDB.mdf 数据库的 asp.net 会员提供程序。我也有自己的数据库,现在我想知道如何将这两个数据库上传到服务器?我应该将它们作为 .mdf 文件上传还是应该使用 SQL 服务器?我更喜欢使用 SQL 服务器,如果有人知道转换和上传这两个数据库的最短方法,那将对我有很大帮助。

提前致谢,
伊利亚

【问题讨论】:

    标签: sql database asp.net-mvc-2 aspnetdb


    【解决方案1】:

    有趣的是,我刚刚完成了同样的事情。基本步骤如下:

    1. 在 Visual Studio 中,加载您的 .mdf 并选择“发布到提供者”以创建一个 .sql 文件。
    2. 打开 SQL Management Studio,打开与数据库的连接并加载 sql 文件。添加“使用您的数据库名称;”最重要的是让它将表输出到您的数据库,然后运行它。
    3. 现在您应该拥有完整的表结构。剩下的就是修改 web.config 以读取新表:

    首先是会员提供者:

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

    现在是角色提供者:

    <roleManager enabled="true">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0,  Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a "
             connectionStringName="ConnectionStringLoginInfo"
             applicationName="/"
                />
      </providers>
    </roleManager>
    

    最后是 WebPart 提供程序,如果您使用它:

    <webParts>
      <personalization defaultProvider="SqlDatabaseProviderDRDBLoginInfo">
        <providers>
          <clear/>
          <add connectionStringName="ConnectionStringLoginInfo"
    
               type="System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider"
               name="SqlDatabaseProviderDRDBLoginInfo"/>
        </providers>
      </personalization>
    </webParts>
    

    在此示例中,我将连接字符串称为ConnectionStringLoginInfo,但无论您如何命名,请确保您在连接字符串部分进行了设置。也不会粘贴那个:)

    这一切都让我费尽心思,但是当我看到我的应用程序在 App_Data 文件夹被删除的情况下完美运行时,那是非常美妙的时刻!

    【讨论】:

    • 另一个选项是覆盖 web.config 中的 LocalSqlServer 连接字符串以指向主机上的数据库。这样您就不必更改每个提供程序以使用不同的连接字符串。
    • 我想我把它搞砸了,这是我设法让它工作的唯一方法,如果我再碰它,我会被诅咒的:)
    • 谢谢 Blindy,在我的国家,我们会说您的答案显示为“蜂蜜中的斧头”:) @Waleed Al-Balooshi,您能否给我一些有关如何尝试此覆盖的更多详细信息?谢谢!
    • @ile 我发布了一个解释如何覆盖 LocalSqlServer 连接字符串的答案。
    【解决方案2】:

    对于托管解决方案(即您的托管计划不是虚拟专用服务器),您最简单的选择是生成数据库的 SQL 脚本,将这些脚本导出到 *.sql 文件,然后在托管的 SQL 连接中运行它们。

    我通常会使用 SQL Server Management Studio 连接到我的 Web 主机的 SQL 实例,然后打开或粘贴由我的本地副本生成的脚本。

    根据您的 Web 主机是否提供服务,您还可以在 Visual Studio 中使用“发布到提供商...”选项。

    【讨论】:

      【解决方案3】:

      作为对 Blindy 回答的补充,我想提一下配置提供程序的另一种方法是更改​​大多数提供程序使用的默认 ConnectionString 的连接字符串设置,即 LocalSqlServer。为此,您只需在 web.config 中覆盖特定的 ConnectionString,如下所示:

      <connectionStrings>
          <clear />
          <add name="LocalSqlServer" connectionString="change this to be the details of your host database" providerName="System.Data.SqlClient" />
      </connectionStrings>
      

      另外,如果您不想清除整个 connectionStrings 部分,您可以像这样删除特定的连接字符串:

      <connectionStrings>
          <remove name="LocalSqlServer" />
          <add name="LocalSqlServer" connectionString="change this to be the details of your host database" providerName="System.Data.SqlClient" />
      </connectionStrings>
      

      这是可行的,因为所有默认使用 Sql Server 作为其数据存储的提供程序(例如成员资格提供程序)默认使用“LocalSqlServer”连接字符串。因此,如果您覆盖它,您不必更改每个提供程序以指向不同的连接字符串。

      此外,出于安全原因,您可能希望研究加密 web.config 文件的 connectionString 部分。以下两篇文章提供了更多信息。

      Encrypting and Decrypting Configuration Sections

      How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA

      【讨论】:

      • 所以你是说商业服务器上应该已经存在aspnetdb了?如果是这样,我应该如何将用户添加到这个数据库?
      • @ile 正如 Blindy 提到的,您需要将 aspnetdb 数据库的内容上传到主机数据库。上传后,您需要确保您的代码现在指向正确的数据库,这就是覆盖 LocalSqlServer 连接字符串的地方。这是提供程序用来连接到 aspnetdb.mdf 文件的连接字符串。因此,一旦您将 db 内容上传到您的主机,一个选项就是更改此特定连接字符串以指向主机数据库。除此以外;您可以按照 Blindy 帖子中的第 3 步进行操作。
      • 现在我有点困惑......我没有看到 Blindy 帖子中的第三步,但我想我明天尝试设置数据库时会发现。谢谢你的帖子!!
      • @ile Blindy 帖子中的第 3 点是您默认使用的成员资格提供程序连接到由 LocalSqlServer 连接字符串指向的 aspnetdb.mdf 文件。当您将数据移动到主机数据库时,您需要确保成员资格提供者知道它在哪里。有两种方法可以做到这一点。 1) 像我向您展示的那样更改“LocalSqlServer”连接字符串。 2) 更改 web.config 中的成员资格提供程序设置以使用与 LocalSqlServer 不同的连接字符串,该连接字符串指向您的主机数据库,如 Blindy 在他的步骤 3 中所示。
      • @ile 完全正确。如果您想使用不同的名称,则需要按照 Blindy 在步骤 3 中发布的说明进行操作。否则;您需要做的就是像我向您展示的那样覆盖 LocalSqlServer,而不必对成员资格提供程序配置做任何事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多