9.5 网站数据库的注册与导入
本节的GridView范例皆是以SQL Server的北风数据库作为数据范例,故在进行GridView范例之前,首要之务是先将网站注册一个数据库源,以及将北风数据库导入到目前的数据库中,关于这部分您可以参考第2章的2.7节、第3章的3.7节,本书有许多章节都一再提到网站数据库的注册,原因无他,若数据库连接设置不正确,不但范例没法做练习,公司的网站或项目部署出去都不可能,所以大家务必弄懂ASP.NET 2.0如何注册数据库、如何读取数据库连接、数据库连接的加解密,除了第2章及第3章介绍如何设置数据库相关事宜以外,第15章的网站管理亦包含了许多重要知识,告诉您如何管理网站与高级配置,所幸祭司都已作系统脉络的整理,各位只要按图索骥就能够无痛完成这些设置。
注
本章所有范例一开始都假设您已完成北风数据库的导入与设置。
范例9-1 ASP.NET网站数据库连接设置
为了引导各位能够正确将网站数据库设置好,祭司大略讲解网站数据库的设置步骤,说明如下。
导入北风数据库(Northwind)
请参考第3章的3.7节,如何将北风数据库导入SQL Server 2005,或者您目前的数据库版本就是SQL Server 2000,则可以不必进行北风数据库的导入,但祭司建议您还是使用本书光盘中的Northwnd.mdf数据库,因为里面有一些范例数据设置。
网站数据库的注册
请到路径“C:\Windows\Microosft.NET\Framework\V2.0.50727”输入以下命令:
ASPNET_REGSQL -S AP2006 -U sa -P test -d VS2005 -A all
在此请以你计算机上的SQL Server帐号密码来设置(请参考第2章2.7节)。
检查数据库连接
虽然上一步已注册好网站所需的数据库,但那并不表示ASP.NET网站连接数据库一定成功,所以必须进一步测试数据库连接的正确性,而连接测试有宽松与严谨两个层级,说明如下:
(1)宽松的连接测试
一般而言,宽松的数据库连接测试使用SqlDataSource,只要SqlDataSource控件能够连接到数据库,也能够读取到数据表就算成功了。
(2)严谨的连接测试
SqlDataSource控件能够连接成功不代表整个ASP.NET网站数据库连接设置就百分之百没问题,为什么这样说呢?因为Membership、Role、Profile及Personalization的数据库连接也有可能会失败,失败了会如何?就是Login帐号、个人的Profile、Web Part等一堆机制会不Work。故必须使用ASP.NET网站管理工具来测试(第15章会详细介绍),请选择【网站】菜单→【ASP.NET配置】进入ASP.NET网站管理工具→选择【提供程序】页签→点击AspNetSqlProvider的测试,若测试成功,则表示数据库设置完全正确,若显示出无法与数据库建立连接的失败消息,则表示您必须再进行下一步骤的数据库连接修正(见图9-2)。

图9-2 测试AspNetSqlProvider数据库连接
修正网站数据库连接设置
请参考第2章2.8节“数据库连接字符串的设置与读取”,使用ASP.NET MMC Snapin的ASP.NET配置设置工具,AspNetSqlProvider不能连接的原因是LocalSqlServer连接设置值为“data source=.\SQLEXPRESS;IntegratedSecurity=SSP;AttachDBFilename=|DataDirectory| aspnetdb.mdf;User Instance=true”,只要将它改为正确的连接字符串“Data Source=Localhost; initial catalog=ProjectDB;User id=sa;Password=test”,再测试上一步骤应该就能正常连接了(见图9-3)。

图9-3 修改LocalSqlServer数据库连接
若您想了解这方面的完整知识,除了第2章2.8节外,请研读第15章网站管理工具,里面有详细介绍。
范例9-2 VS 2005对SQL Server数据库拖曳的支持
VS 2005在SQL Server数据库支持方面比VS.NET 2003做得更好,可以将SQL Server数据字段直接拖曳到ASP.NET网页设计界面,并自动建立好GridView与Sq1DataSource数据库连接的相关设置,一切都替各位打理好后,请参考DragAndDropDB.aspx程序,步骤说明如下:
创建VS 2005与数据库连接
请开启服务器资源管理器(或数据库资源管理器)建立与SQL Server数据库的连接,若您仍不清楚如何做,详细步骤请参考第3章的3.9节,在此将连接到北风数据库,本范例将以Employees员工数据为示范对象。
选取数据表字段
请按住Ctrl键不放,以鼠标连续点击Employees数据表的EmployeeID、LastName、FirstName与Address四个字段。
拖曳数据库字段
接着请按住鼠标按钮不放,将这四个字段往Web Form拖曳过去,最后放开鼠标按钮后,VS 2005会自动产生GridView控件及SqlDataSource相关设置(见图9-4)。

图9-4 直接拖曳数据库字段到Web Form
自动产生的程序代码如下:
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="DragAndDropDB.aspx.vb" Inherits="DragAndDropDB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>未命名页面</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns=
"False" DataKeyNames="EmployeeID"
DataSourceID="SqlDataSource1" EmptyDataText="没有数据记录可显示。">
<Columns>
<asp:BoundField DataField="EmployeeID" HeaderText=
"EmployeeID" ReadOnly="True" SortExpression="EmployeeID" />
<asp:BoundField DataField="LastName" HeaderText="LastName"
SortExpression="LastName" />
<asp:BoundField DataField="FirstName" HeaderText="FirstName"
SortExpression="FirstName" />
<asp:BoundField DataField="Address" HeaderText="Address"
SortExpression="Address" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
DeleteCommand="DELETE FROM [Employees] WHERE [EmployeeID] =
@EmployeeID" InsertCommand="INSERT INTO [Employees] ([LastName],
[FirstName], [Address]) VALUES (@LastName, @FirstName, @Address)"
ProviderName="<%$ ConnectionStrings:
NorthwindConnectionString.ProviderName %>"
SelectCommand="SELECT [EmployeeID], [LastName], [FirstName],
[Address] FROM [Employees]"
UpdateCommand="UPDATE [Employees] SET [LastName] = @LastName,
[FirstName] = @FirstName, [Address] = @Address WHERE [EmployeeID]
= @EmployeeID">
<InsertParameters>
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="Address" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="Address" Type="String" />
<asp:Parameter Name="EmployeeID" Type="Int32" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="EmployeeID" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
</div>
</form>
</body>
</html>
完成后请按【F5】键运行程序,运行结果如图9-5所示,而这个应用范例正是所谓的Code Free例子之一,后面还会介绍许多Code Free免程序代码的应用。

图9-5 DragAndDrop.aspx网页运行界面
注
(1)直接拖曳数据表的功能不限于SQL Server数据库,对于Oracle、Access数据库也同样支持。
(2)若您在VS 2005中是使用Access数据库进行拖曳的,记得运行时必须先将服务器资源管理器或数据库资源管理器的Access连接关闭,否则会有“文件已在使用中”的警告错误消息产生而无法运行网页。






