【问题标题】:App_Data/ASPNETDB.MDF to Sql Server 2005 (or 08)App_Data/ASPNETDB.MDF 到 Sql Server 2005(或 08)
【发布时间】:2009-04-13 05:11:49
【问题描述】:

我一直在开发一个需要帐户登录功能的 ASP.NET WebForms 应用程序(例如注册新用户、更改密码、恢复密码、配置文件、角色等)。为此,我将 FormsAuthentication 与默认数据存储一起使用,令我惊讶的是,它是 App_Data 中的 MDF 文件。当需要实际部署此应用程序时。生活在网络上,我将使用一些共享主机,如 GoDaddy 或其他便宜的公司。

为了提高效率,我想从这个 MDF 切换到实际的 SQL Server 2005 或 2008(谁在他们的头脑中使用平面文件?)。但是,对于共享主机,我将无法运行任何程序,例如 aspnet_regsql.exe。我只需要一个 SQL Server 数据库的登录名和密码,以及一个进入域根目录的 FTP 帐户。没有 MSTSC 远程桌面,没有控制台访问,没有 IIS 中的修补等等。

我不需要从 ASPNETDB.MDF 转移任何用户帐户(网站将从零用户开始),但我想怎么做:

1) 在我使用网站管理工具开始使用 FormsAuthentication 时,轻松创建 Visual Studio 在 ASPNETDB.MDF 中自动创建的表、过程等?

2) 让 SQL 成员资格提供程序使用我给它的连接字符串,而不是使用现在的任何东西来连接到这个 ASPNETDB.MDF。见鬼,我什至在 web.config 中都没有看到这个 MDF 的任何连接字符串;我的应用到底是怎么回事。甚至找到它?机器配置?如果是这样,那将是一个糟糕的决定。这种幕后的废话让我抓狂。

非常非常感谢经历过这次迁移的人提供的任何帮助!

【问题讨论】:

    标签: asp.net forms-authentication


    【解决方案1】:

    .mdf 不是平面文件。它是一个 SQL Server Express 数据库文件。

    有时最好不要在泥路上驾驶保时捷……;)

    如果您要托管具有严格后端的网站,我建议您使用专用服务器。从管理员的角度来看,共享主机存在限制。

    为了在 SQL Express 中查找表,SQL Server EE 附带了一个名为“management studio”的工具,它应该允许您访问 .mdf 等中的表

    这是一个连接到您的 web.config 中的 .mdf 的字符串示例

    <connectionStrings>
    
            <add name="AddressBookConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\AddressBook.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
    
    </connectionStrings>
    

    我很同情你的沮丧。建立和托管一个复杂的网站并非易事。如果您为站点计划任何严肃的事情,通常运行向导来配置 Web 应用程序是一个坏主意,除非您正在学习 Web 应用程序。如果您要进行专业托管,您需要超越该抽象级别并了解有关如何手动配置/覆盖会员提供程序等的更多信息。

    希望这将为您指明正确的方向。祝你好运;)

    【讨论】:

    • 您还应该能够通过 Visual Studio 访问 mdf。
    【解决方案2】:

    该 MDF 文件是一个 SQL Server 数据库。所有 SQL Server 版本(CE 除外)都使用相同的文件格式,因此任何其他 SQL Server 都可以使用 sp_attach_db 或 SSMS 打开 MDF,请参阅 How to: Attach a Database (SQL Server Management Studio).。连接到 SQL Server 后,SSMS 可以编写整个数据库的脚本,请参阅How to: Generate a Script (SQL Server Management Studio)。这也可以使用 SMO Scripter 对象以编程方式完成。 SSMS 脚本将包含数据库中的所有表、索引、过程和所有其他对象。还有一个Import and Export Wizard in SSMS,您可以使用它将表格内容(任何数据)导出到 CSV 文件中,然后将此 CSV 文件导入到您的托管数据库中,但是该导入/导出向导相当复杂(它使用 SSIS) .

    另一种数据导出方法是使用 bcp 实用程序,请参阅Bulk Import and Bulk Export Operations

    从技术上讲,您可以在 VS 环境中使用 SQL Server Express 实例执行所有这些操作,使用 sqlcmd 和 bcp 等命令行工具,也许还可以编写自己的 SMO Scripter 应用程序来导出数据库架构。但是,这需要一定程度的经验。访问一个成熟的 Managent Studio 来准备所有要在您的托管站点导入的数据将会变得容易得多。

    不要忘记与您的提供商核实他们是否允许恢复或附加您自己的数据库,那么您只需向提供商​​提供文件副本即可轻松逃脱。

    请注意,您的 MDF 文件只能附加到至少与您创建的版本相同的 SQL Server 上。您的 VS 环境包含一个 SQL Server,可能名为 SQLEXPRESS,您必须准确检查它的版本。比您的 VS SQL 实例版本更早版本的服务器将拒绝附加您的 MDF 文件,因为它是他们无法识别的格式。按照KB 321185 中的步骤确定您的 VS 环境的 SQL Server 版本。

    更新

    我不知道 VS 有一个导出向导。只需按照他提供的步骤Gary mentions in the link

    【讨论】:

      【解决方案3】:

      某些细节会因您的托管服务提供商而异,但是:

      1. 如果您还没有这样做,请下载并安装Microsoft SQL Server Management Studio Express

      2. 您的托管服务提供商必须向您提供管理员连接信息才能连接到您的 sql server 实例。使用该信息验证您是否可以使用 MSSMSE 进行连接。如果你不能,那么剩下的就无关紧要了。

      3. 转到此weblog 并按照步骤创建所需的数据库脚本,以将您的数据库转移到生产环境。这些脚本可以在 MSSMSE 的查询窗口中运行。

      4. 通常您的连接字符串将存储在 Web.Config 文件中。连接字符串。如果正如您在问题中所说,您已移至完整的 SQL Server,您将不想使用“AttachDbFilename =”样式。你的连接字符串看起来更像这样:

      【讨论】:

        【解决方案4】:

        MDF 实际上并不是一个平面文件数据库,它使用带有user instances 的 SQL Express 引擎,因此它可以即时附加数据库。这个引擎是 SQL Server 的一个受限版本,虽然限制相当高,所以除非你有一个繁忙的站点,否则它不会成为问题。从here,限制是...

        • 缺乏企业功能支持
        • 仅限一个 CPU 1 GB 内存
        • 缓冲池数据库的限制
        • 最大大小为 4 GB

        连接字符串应该在您的 web.config 中,搜索“AttachDbFileName”(不带引号)。欲了解更多信息,请参阅here

        如果您的托管程序包中有完整的 SQL,通常托管公司会为您提供一个 Web 工具,以将 MDF 文件(通过指定其路径)附加到完整的 SQL 服务器实例。您可以将 MDF 文件留在 app_data 文件夹中(因为该文件夹设置了权限,防止匿名用户下载 db 文件)。

        一旦附加使用 SQL Server 标准实例(或其他版本)而不是 SQL Express 用户实例,您只需更改 web.config 文件中的连接字符串以指向您使用 Web 工具配置的数据库实例,而不是而不是使用 SQL Express 的自动附加功能。

        请参阅here 了解 Godaddy 说明。

        【讨论】:

          【解决方案5】:

          如果您从新数据开始,这很容易做到

          我运行“C:\Windows\Microsoft.NET\Framework\v2.0.50727\a spnet_regsql -C *Data Source=localhost;Initial Catalog=MYDB;Persist Security Info=True;User ID=;Password=** ;" * -A all" 将 ASP.NET 成员表和存储过程包含到我选择的数据库中。如果你这样做..确保覆盖默认的 LocalSQLServer 连接字符串,否则它不会在 web.config 中找到这样的数据库你的 asp.net 网站

          【讨论】:

          • 您没有阅读问题中的所有内容吗? Quote: 我将无法运行任何程序,如 aspnet_regsql.exe
          • 如果您从新数据开始,您可以在将其上传到 godaddy 之前运行 aspnet_regsql.exe。我想我忘了补充。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-25
          • 2013-01-08
          • 1970-01-01
          相关资源
          最近更新 更多