上一篇文章中,北京北大青鸟学校学术老师介绍了Visual Web Developer和数据,这篇内容将介绍本地和服务器数据库。
北京北大青鸟学校学术老师介绍,我们已经熟悉了基于服务器的数据库和连接字符串。在这种情况下,数据库服务器(例如SQL Server 2005)把数据库名称与服务器所维护的数据库文件相关联。我们可以通过指定服务器名称、数据库名称和凭证来连接到基于服务器的数据库,例如:
"server=(local)\SQLExpress;database=Pubs;Integrated Security=true"
但是,北京北大青鸟学校学术老师介绍Visual Studio 2005还支持本地数据库的概念,它是添加到当前Web应用程序的App_Data目录中的一个文件。在App_Data目录中存储数据文件是安全的,因为这个目录中的内容永远不会响应用户的请求。这个目录也是存储XML文件和其它数据存储的推荐位置。本地的SQL Server Express数据库带有.MDF扩展名(例如"MyDatabase.MDF"),它是SQL Server支持的标准文件格式。当连接到服务器的时候,数据库还有一个关联的日志文件(例如"MyDatabase_log.LDF")。数据库文件和日志文件的位置必须在一起。
北京北大青鸟学校学术老师介绍,我们可以通过使用相对路径连接字符串把本地文件数据库自动地附加到SQL Server Express。相对路径确保了应用程序迁移到任何其它地方的时候都不会中断数据库连接。Web应用程序中的相对路径连接字符串如下所示:
"server=(local)\SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"
上面的连接字符串还有两个额外的属性。AttachDbFileName属性指定连接打开的时候动态附加到服务器上的数据库文件的位置。尽管这个属性可以接受数据库的完整路径(例如使用|DataDirectory|语法),但是在运行时这个路径会被应用程序的App_Data目录所代替。这也保证了应用程序迁移到其它位置的时候连接不会中断。第二个属性是User Instance=true,它指定SQL Server Express附加数据库的方式。在这种情况下,SQL Server Express为了把数据库附加到新的实例,建立一个新的进程,在打开连接的用户身份下运行。在ASP.NET应用程序中,这个用户是本地的ASPNET 帐号或默认的Network Service,这依赖于操作系统。为了安全地附加非系统管理员帐号(例如ASP.NET帐号)提供的数据库文件,建立一个独立的SQL Server用户实例是必要的。
北京北大青鸟学校提醒:由于在默认情况下,所有的ASP.NET应用程序运行在同一个进程下,因此所有的应用程序会把本地数据库附加到同一个SQL Server Express实例。这意味着不管应用程序最初附加的数据库是哪一个,所有的应用程序对附加到这个实例的所有数据库都拥有相同的访问权限。为了隔离不同的应用程序,你必须让每个应用程序运行在不同的工作进程或应用程序池(在IIS 6中)中。由于这个原因,本地SQL Server数据库主要是为了方便开发,而不是用于代替共享主机环境下的基于服务器的数据库。
此外,北京北大青鸟学校还要提醒一点,不允许两个用户同时连接到一个本地数据库。在Visual Studio中设计应用程序的时候,设计器自动地释放连接,以保证Visual Studio和ASP.NET能够共享数据库文件(例如在设计器中调试运行中的应用程序)。