我一直在开发一个需要帐户登录功能的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的连接字符串;怎么到底是我的应用程序。甚至找到了吗? Machine.config中?如果是这样的话那将是一个糟糕的决定。幕后的废话让我疯狂。
非常非常感谢来自此次迁移的人的任何帮助!
答案 0 :(得分:4)
.mdf不是平面文件。它是一个SQL Server express数据库文件。
有时最好不要在泥泞的道路上驾驶保时捷......;)
如果您要主持一个有严重后端的网站,我建议您使用专用服务器。从管理角度来看,共享托管具有限制。
为了在SQL Express中查找表,有一个名为“management studio”的工具随SQL Server EE一起提供,它允许您访问.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应用程序是一个坏主意。您需要超越该抽象级别,并了解有关如何手动配置/覆盖成员资格提供程序等的更多信息,如果您要进行专业托管。
希望这会指出你正确的方向。祝你好运;)
答案 1 :(得分:4)
该MDF文件是SQL Server数据库。所有SQL Server版本(CE除外)都使用相同的文件格式,因此可以使用sp_attach_db或SSMS通过任何其他SQL Server打开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。
技术上,您可以使用命令行工具(如sqlcmd和bcp)使用VS环境中的SQL Server Express实例执行所有这些操作,也可以编写自己的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进行操作即可。
答案 2 :(得分:3)
根据您的托管服务提供商,一些细节会有所不同,但是:
如果您还没有这样做,请下载并安装Microsoft SQL Server Management Studio Express
您的托管服务提供商必须提供管理连接信息才能连接到您的sql server实例。使用该信息验证您可以使用MSSMSE进行连接。如果你不能,那么其余的都无所谓。
转到此weblog并按照步骤创建所需的数据库脚本,以将数据库移至生产环境。这些脚本可以在MSSMSE的查询窗口中运行。
通常,您的连接字符串将存储在Web.Config文件中。连接字符串。如果您在问题中说明已移至完整的SQL Server,则不希望使用“AttachDbFilename =”样式。你的连接字符串看起来更像是这样:
&lt; add name =“myConnectionName”connectionString =“Data Source = myServerAddress; Initial Catalog = myDataBase; User Id = myUsername; Password = myPassword;”&gt;
答案 3 :(得分:1)
MDF实际上不是一个平面文件数据库,它使用带有user instances的SQL Express引擎,因此它可以即时附加数据库。这个引擎是SQL Server的限制版本,虽然限制很高,所以除非你有一个繁忙的站点,否则它不会成为问题。来自here,限制是......
连接字符串应该在您的web.config中,搜索“AttachDbFileName”(不带引号)。有关详细信息,请参阅here。
如果您的托管包中有完整的SQL,托管公司通常会为您提供一个Web工具,用于将MDF文件(通过指定其路径)附加到完整的SQL Server实例。您可以将MDF文件保留在app_data文件夹中(因为该文件夹具有权限设置,可防止匿名用户下载db文件)。
一旦附加使用SQL Server标准实例(或其他版本)而不是SQL Express用户实例,您只需要更改web.config文件中的连接字符串以指向您使用Web工具配置的数据库实例而不是使用SQL Express的自动附加功能。
有关godaddy说明,请参阅here。
答案 4 :(得分:-2)
如果您从新数据开始,这很容易做到
我运行了“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成员资格表和sprocs包含到我选择的数据库中。如果你这样做..确保你覆盖默认的LocalSQLServer连接字符串,否则它将无法在web.config中找到这样的数据库你的asp.net网站
&LT;&的ConnectionStrings GT; &LT;清除/&GT; &lt; add name =“LocalSQLServer”connectionString =“Data Source = localhost; Initial Catalog = MYDB; Persist Security Info = True; User ID = **; Password = ****;” providerName =“System.Data.SqlClient”/&gt;