ASP.NET2.0数据库入门之SQL Server
因为access并不真正为高性能应用程序服务,所以一个希望有多个同时连接用户的站点必须部署一个比access更适合的数据源。本文将讲述如何从microsoft sql server(一种企业级rdms)中获取数据。
sql server完全版包括了三个部分。第一个是引擎,用于实际组织数据以及针对命令响应进行读取和写入操作。第二个是开发人员的工具软件包,用于对数据库进行操作,例如query analyzer和data transformation services。最后一个是用于管理数据的工具,包括备份程序和复制模式。
虽然完全版对大型企业来说有着不可估量的好处,但是很多开发人员并不需要整套工具。幸运的是,microsoft提供了一个sql server引擎的免费版,叫做sql server express(sse)。尽管它具有一个使用t-sql命令来导入模式和数据的命令行工具(osql.exe),但是它还不包含在sql server完全版中具有的丰富图形化的工具。不过,可以方便地使用visual studio或者visual web developer来使用sse开发数据库。sse有一个限制,即只处理本地的连接(不可能在web服务器之外的不同机器上运行sse)。对于具有某些嗜好的人以及学生的web站点来说,sse是一个非常适合的选择。可能会使用基于sql server 2000的msde,而sse则基于sql server的yukon版。
除非有另外特别的说明,这里所介绍的所有技术均可应用于sql server的三种形式(完全版产品、sse和msde),因此,通用术语sql server包含了这三种形式。
因为sse只是一个引擎而并没有内置的开发工具(到2004年),所以必须使用其他的工具来创建、修改或者填充数据库。为此我们将要使用的主要工具是visual studio或者visual web developer,其中提供了database explorer作为其界面的一部分。请注意database exporer可以更改本地数据库中的数据和模式,但是它只能更改远程数据库中的数据(而不是结构)。在visual studio中,database explorer被称为server explorer,因为它包括了一些处理非数据库服务器的附加功能。我们还将在本书的开端简单地使用osql.exe命令行工具来导入将在本书通篇使用的初始数据库。修改数据库结构的第三种方式是打开access,然后在sse数据库中链接一个外部表。
使用sql server需要熟悉一些词汇。sql server安装在一台称为服务器(server)的机器上,并且可以通过其机器名来引用。如果sql server与请求软件位于同一台机器上,那么这台机器可以用(local)来引用。引擎可以在一台机器上安装多次,每一次安装称为一个实例(instance)。sse安装一个名为(local)\sqlexpress的实例。在一个实例内,可以创建数据库(database)。数据库有一些具有字段(field)和记录(record)的表(table)。数据库还有供数据使用者使用的一组表、字段和约束,称为视图(view)。存储过程(stored procedures,sproc)可以对数据执行任务。一个sql server实例自动安装了一个用户名为sa的账户,当对用户使用sql server认证时,这个账户具有对所有对象进行所有动作的权限。在使用windows认证(也称为混合认证)的时候,登录进windows的用户也同时登录进了sse。
使用sql server数据库之前的准备
花时间在研究数据库上将减少您设计使用数据的页面时的错误。在编写使用sql server的页面之前,请检查您是否已掌握了如下几类信息:
· 服务器、实例和数据库名称—— 确认服务器名称、实例和数据库名称的确切拼写。如果在服务器上只有一个完全版sql server的实例,那就不需要使用实例名了。但是即使在服务器上只有一个sse的实例,也必须用myserver\sqlexpress来显式地引用。请明确是将要测试实际数据还是测试数据库的部署备份。
· 安全信息—— 您需要知道您的用户id和密码,以便对开发数据库的访问进行认证。同样地,请检查sse是使用windows认证还是sql认证(第1章中的安装曾说明sse应该使用windows认证)。
· 数据库模式—— 理解数据库的模式。获得表和字段名、自动生成或锁定的字段、相关性以及约束的确切拼写。仔细注意对象名称中的下划线和空格。从数据库管理员那里查到是直接使用表还是使用视图或者存储过程(sproc)。使用后者将可能需要特殊数据类型的参数。用来检查这些元数据的sql语法罗列在本章的后面。
· 测试sql语句(可选)—— 您可能会怀疑sql语句的语法或者逻辑。您将会发现测试语句的有效方法是使用诸如sql的query analyzer的开发工具,而不是在这些语句第一次出现在aspx页面上时才测试。
连接字符串
accessdatasource控件和sqldatasource控件之间语法的主要区别在于使用数据库的方式各异。对mdb来说,我们只需提供文件名和路径名,而sqldatasource则使用包含了服务器名称、数据库名称和登录信息的连接字符串名。连接字符串的语法区别于我们在visual basic或者c#中所熟悉的语法,并且也是很多学生犯错误的原因。一个典型的连接字符串如下:
connectionstring="server=myserver; database=mydatabase;user id=myid; password=mypass"
多行的连接字符串的格式能够提高可读性,如下所示:
connectionstring="
server=myserver;
database=mydatabase;
user id = myid;
password=mypass"
首先,我们来讨论语法。源代码中整个字符串处于双引号之中。当在vwd的属性窗口指定连接字符串时,您不需要引号,vwd将会自动添加。在引号中间是一些格式如criteria=value的成对信息。分号将这些信息分隔开。请注意,值不需要使用引号。同样,请注意即使判句中包含空格(例如user id),它们也不需要使用引号或者方括号。这种语法理解起来并不困难,但是因为与vb、c#和sql语言不同,所以错误常常出现。现在让我们花一点时间将这个字符串分解开来。
在这个连接字符串中有两种值:数据库标识符(服务器、实例和数据库)和安全值(用户id、密码和安装设置)。数据库标识符以服务器值开始,这个值是运行sql server的机器的网络名称。(在xp中机器名称的获得可以通过start->my computer;单击右键并选择properties->computer name tab->full computer name。在windows 2000中,可以在桌面的my computer上单击右键->properties->network indentification)。如果知道数据库服务器与asp.net运行的web 服务器使用相同的机器,那么还可以将服务器名称指定为(local)来表明服务器就是asp.net页面运行的本地机器。可以用instance=myinstance来添加实例。更一般的情况是,使用myserver \my- instance或者(local)\myinstance来添加实例至服务器名称。可能还会看到使用句点(句号)来表示本地机器,例如.\sqlexpress。
在默认情况下,sse安装自己的实例。单独引用(local)将导致失败。必须使用(local)\sqlexpress来引用sse。
安全设置将在本章稍后讨论。现在,我们来了解windows authentication,使用属性integratedtrusted_connection=true而不是用户id和密码属性。sql认证需要两个值:user=myusername;password=mypassword,其中myusername和mypassword将被您的证书代替。本文使用的是windows认证。
如果您熟悉asp早期版本,那么也许对提供程序感到疑惑。sqldatasource的默认提供程序是.net framework data provider for sql server。所以在本章中不需要指定提供程序。下一章将会讨论为其他数据库指定非默认的提供程序。