在2005年11月7日,微软正式发行了.NET 2.0(包括ASP.NET 2.0),Visual Studio 2005和SQL Server 2005。所有这些部件均被设计为可并肩独立工作。也就是说,ASP.NET版本1.x和版本2.0可以安装在同一台机器上;你可以既有Visual Studio.NET 2002/2003和Visual Studio 2005,同时又有SQL Server 2000和SQL Server 2005。而且,微软还在发行Visual Studio 2005和SQL Server 2005的一个 Express式的SKU。注意,该Express版并不拥有专业版所有的特征。
2.0除了支持1.x风格的数据存取外,自身也包括一些新的数据源控件-它们使得访问和修改数据库数据极为轻松。使用这些数据源控件时,你只需简单地添加该控件到ASP.NET页面并通过这些控件的属性来配置连接串和SQL查询即可。然后,通过把数据Web控件的DataSourceID属性设置为数据源控件的ID,该数据源控件就能被绑定到一个数据Web控件(如GridView)上。现今,必须靠编写代码来创建连接,创建命令,指定SQL查询,检索一个DataReader或DataSet,并且把它绑定到数据Web控件的日子已经过去了。这些步骤能够通过使用声明性数据源控件来代替。(当然,你还能通过使用你的1.x代码中的熟悉的步骤编程地存取数据。)
在本文中我们将看一下怎样连接和显示来自一ASP.NET 2.0数据库的数据。具体地说,我们将讨论怎样使用编程和声明性方法来存取数据,以及分析通过GridView控件来显示数据的基本操作。
二、 在Visual Studio 2005中操作数据库
当你安装Visual Studio 2005的任何版本时,你总是被询问是否你也想安装SQL Server 2005 Express版本。如果你选择Yes,这将安装你的开发包中的SQL Server 2005 Express版本-注意,在此你正在安装Visual Studio 2005!(SQL Server 2005 Express版本可以与SQL Server的其它版本一起安装,包括SQL Server 2000和SQL Server 2005的其它版本。)
如果你在当前工程中使用SQL Server 2000,那么你可以通过企业管理器来以最舒适的方式操作数据库。尽管你仍能使用企业管理器来操作SQL Server 2000,或使用SQL Server 2005的管理Studio来操作你的SQL Server 2005数据库;但是,你也能通过Visual Studio 2005的数据连接来管理这些数据库。我提及这些是因为对于SQL Server 2005 Express版本来说,不存在一个象SQL Server 2000的企业管理器或SQL Server 2005的管理 Studio这样的GUI工具;代之的是,你必须通过Visual Studio 2005来创建和管理你的SQL Server 2005 Express版本数据库。
提示 管理SQL Server 2005 Express版本数据库
如果你有任何其它除 Express以外的SQL Server 2005版本,你可以在你的机器上安装客户端工具,它包括管理Studio-管理SQL Server 2005数据库的GUI工具。如果你安装了这个工具,你还可以使用它来管理SQL Server 2005 Express版本数据库 。
为了通过Visual Studio 2005来管理一个数据库,请选择到Server Explorer;在其上,你将找到一个数据连接结点(见上图的快照)。你可以通过在数据连接结点上单击鼠标右键来添加新的数据库连接并且选择"Add Connection"。这将会调出一个对话框提示你一些信息,如数据库服务器、认证信息、使用什么数据库等。如果你在自己的机器上安装了SQL Server 2005 Express版本,那么即缺省地通过使用名为SQL Express的实例安装了这个数据库。因此,要连接到的服务名将是YourMachineName\SQL Express或.\SQL Express。除了连接到一个现有数据库外,你还可以通过在数据连接结点上单击鼠标右键并且选择创建新的SQL Server数据库来创建一个新的数据库。
一旦一个数据库被添加到该数据连接选项卡上,你就可以通过适当的文件夹来添加、删除或修改数据表,存储过程,视图等。为了创建一新的数据表或存储过程,右击适当的文件夹并且选择"Add New X"菜单选项;为了修改一现有数据表、存储过程或视图,双击之即可。这将把它们调用到Visual Studio中-在此你可以据需要修改它。你也可以观察和修改在单个数据表中的数据-这是通过右击一个数据表名并且选择"显示数据表数据"来实现的。
三、 添加一数据库到App_Data文件夹
除了通过数据连接选择卡添加现有数据库外,你还可以添加一个站点特定的数据库到该网站的App_Data文件夹下。App_Data是一新的,保留在ASP.NET 2.0中的文件夹-它被设计来存储数据有关的内容,包括SQL数据库文件(.mdf文件)、Access数据库文件(.mdb文件)、XML文件等。从一个ASP.NET网站工程,你可以轻松地创建并且添加一新的SQL Server 2005 Express数据库到你的工程-通过右击Solution Explorer中的App_Data文件夹并且选择"Add New Item"。然后,从"Add New Item"对话框(显示如下)中,选择添加一新的SQL数据库。
如果你想跟随本文的步骤,那么请在App_Data文件夹下创建一个称为Customers.mdf的SQL Server 2005 Express数据库。然后,添加一个数据表到这个称为Customers的数据库-用下面字段列:CustomerID(一个自动增加的主键字段),Name,City,State和ZipCode。然后,通过VS 2005添加一些记录到这个数据表。
另外,你还能添加现有Access数据库文件甚至SQL Server 2000数据库文件。(注意:为了添加一现有SQL Server 2000 .mdf文件,你将需要确定它是第一次从企业管理器上分离;为此,在企业管理器上右击数据库名字,再选择"All Tasks"并且选择"Detach数据库"。一旦你分离开该数据库并且把它添加到ASP.NET 2.0工程,你就可以通过企业管理器重新依附它。)
四、 把SqlDataSource控件连接到数据库
现在,既然我们看到了怎么创建并且通过Visual Studio的接口来使用数据库;下面,让我们把注意力转到从一个ASP.NET 2.0 web页面访问和显示来自一数据库的数据上。ASP.NET 2.0包括了几个新的数据源控件-它们的唯一目的是提供到数据的声明性存取。共有五个内置的数据源控件-它们都能够在Visual Studio中的工具箱的"数据"部分找到(请见下边的屏幕快照)。
·SqlDataSource-用于检索和修改来自于一个关系数据库的数据。这里的"Sql"并不意味着这种数据源只与微软SQL Server一起工作;而是可以与其它任何一种关系数据库一起工作:SQL Server,Access,Oracle,等等。如果你在连接到一个SQL Server数据库,那么控件将会非常聪明地在内部启用SqlClient类。
·AccessDataSource-用于检索和修改来自于一个Access数据库文件的数据。你可能想知道,如果SqlDataSource能够与Access数据库文件一起工作,那么为什么还存在这个控件呢?其实,这个Access数据源控件使得你更容易地连接到一个Access数据库-你只要指定到Access数据库的.mdb文件的路径即可。注意在使用SqlDataSource时,你需要使用一完全限定的指定数据提供者的连接串。
·ObjectDataSource-用于通过一个商业对象来检索和修改数据。理想地,你的ASP.NET应用程序包括一组类-它形成中间层(而不是让ASP.NET页直接操作数据库)。如果你有如此的结构,那么可以使用ObjectDataSource来查询中间层。
·XmlDataSource-用于检索来自一XML文件的数据。
·SiteMapDataSource-用于提供只读存取定义在站点地图中的站点结构。这个控件在当你想要在一个TreeView或Menu控件中显示一个站点的结构时使用。
在本文中,我们将只讨论Sql数据源控件,并且仅分析其基本功能。
首先,让我们添加一个Sql数据源控件到你的ASP.NET页面。从设计视图中,Sql数据源控件包含一个"灵敏标签"-它列举出它的常用功能。该"Configure Data Source"灵敏标签链接将激活一个向导-它将一步步引导你通过整个的配置数据源的过程。这个向导主要有三个步骤(和一个可选的"子步骤"):
1. 选择你的数据连接-在第一步中,我们需要指定连接到什么数据库。这个屏幕包含在App_Data文件夹中数据库的一个下拉列表和在数据连接选项卡中的一个下拉列表。还有一个"New Connection"按钮-你可以点击它,如果你想要连接到一个不在这些位置之一中的数据库。如果你继续下去,可以从下拉列表框中选择Customers.mdf选项。
a) 子步骤:如果这是你添加连接的第一次,你将会被提示是否你想要把连接串保存到Web.config之中;而且如果这样的话,应该是连接串的名字。如果你继续下去,我选择用名字CustomersConnectionString把连接串保存到Web.config中。
2. 设置Select语句-下一步是指定你想要返回什么记录,应用什么样的条件语句以及返回数据的排序顺序。为此,你可以通过使用向导来选择一个数据表或视图并且选择返回哪一列,或你可以手工地输入一个SELECT语句。无论哪一种方法,都是让Sql数据源控件返回来自Customers数据表的所有的列-换句话说,让它实现"SELECT * FROM Customers"。
3. 查询测试-你可以针对数据库运行你的SELECT查询以得到返回数据的一个预览。请自由地点击"Test查询"按钮;你应该看见所有的来自该Customers数据表的所有记录。
一旦你配置好SqlDataSource,请拿出一点时间看一下Source视图并且检查一下为Sql数据源控件所使用的声明性标记: <asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:CustomersConnectionString %>"
SelectCommand="SELECT * FROM [Customers]">
</asp:SqlDataSource>
有几点要注意:首先,ConnectionString属性使用了新的句法<%$ ... %>。这个句法从Web.config文件中检索ConnectionStrings节的值的CustomersConnectionString值。换句话说,它从Customers数据库中获取连接串-该串是我们在Sql数据源控件的向导的子步骤中保存下来的;其次,SELECT查询语句是在控件的SelectCommand属性中指定的。
这些数据源控件其自身只与数据一起工作。他们不显示数据。如果你通过你的浏览器访问这个ASP.NET页面,你将发现没有产生输出。为了观察由我们刚才创建的Sql数据源控件所返回的数据,我们需要添加一个数据Web控件。对于本文来说,让我们使用GridView控件-你也可以在工具箱的"数据"节中找到它。该GridView是ASP.NET 1.x的DataGrid控件的"老大哥"-它提供了一些新的特性。在本文中,我们只分析到GridView的简单的数据绑定。
现在,我们把一个GridView控件拖动到你的ASP.NET页面上。从设计视图中,该GridView的灵敏标签包括一个"Choose Data Source"选项并且有一个下拉列表的所有的数据源控件在该页面上。把这个下拉列表设置为SqlDataSource1-即是我们刚添加的Sql数据源控件的ID。一旦做完这些,该GridView将自动地有一个BoundFields添加到它上面-对于由数据源所返回的每一列(该GridView的BoundField等价于DataGrid中的BoundColumn)。通过GridView的灵敏标签来设置"Choose Data Source"下拉列表就可以把GridView的DataSourceID属性设置为所选择数据源控件的ID。
就这么多,不需要写一句代码!下面是通过一浏览器观看该GridView时的一个屏幕快照。
通过使用GridView和Sql数据源控件,我们就能够在30秒内从一个空白页转到一个显示数据库数据表的内容的页面。事实上,我们可以在另一个30秒内完成把分页、双向排序、删除和编辑支持添加到该GridView上,现在且不多谈!)
如我们前面所见,使用一个SqlDataSource检索信息非常快捷,但是如果你想要编程地存取数据又会怎样呢?或者,也许你已经有了现成的代码-该代码将取得你想要的精确数据并且据需要进行管理;并且一旦完成,即修改你将要在一个GridView中所显示的数据。没有问题,你可以就象在1.x中一样地在2.0中存取数据-通过创建一个到数据库的连接,创建一个命令,指定查询,填充一个DataReader或DataSet,然后使用该控件的DataSource属性和DataBind()方法把结果绑定到数据Web控件。
下列代码显示出一个ASP.NET页面的Page_Load事件处理器-它编程地把Customers数据库数据表的内容绑定到GridView控件gvCustomers上:
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'Start by determining the connection string value
Dim connString As String = ConfigurationManager.ConnectionStrings(connStringName).ConnectionString
'创建一个SqlConnection实例
Using myConnection As New SqlConnection(connString)
'指定SQL查询
Const sql As String = "SELECT * FROM Customers"
'创建一个SqlCommand实例
Dim myCommand As New SqlCommand(sql, myConnection)
'取回一个DataSet
Dim myDataSet As New DataSet
'创建一个SqlDataAdapter查询
Dim myAdapter As New SqlDataAdapter(myCommand)
myAdapter.Fill(myDataSet)
'把DataSet绑定到GridView
gvCustomers.DataSource = myDataSet
gvCustomers.DataBind()
'关闭连接
myConnection.Close()
End Using
End If
End Sub
在此,要注意几点:为了取得连接串,我们可以参考Web.config中的连接串设置-使用句法为
ConfigurationManager.ConnectionStrings(connStringName).ConnectionString。其中,connStringName的值应该是在Sql数据源控件向导(CustomersConnectionString)的子步骤中指定的值。另外注意,Visual Basic 8(2.0中使用的VB版本)现在支持Using关键字-这是在前面的版本中仅适于C#的一个语言特点。
编程地存取数据和输出结果等同于使用Sql数据源控件的情况。
六、 结论
在本文中,我们分析了在Visual Studio 2005中使用ASP.NET 2.0数据库的情形。我们讨论了怎样通过Visual Studio管理数据库,以及怎样通过App_Data文件夹来添加网站特定的数据库。最后,我们分析了怎样使用Sql数据源控件和编程的方式来存取数据。当使用一个数据源控件时,通过设置GridView的DataSourceID属性来把数据绑到一个GridView控件上;当编程地访问该数据时,通过把数据赋值给GridView的DataSource属性和调用GridView的DataBind()方法来实现把数据绑定到GridView。(后一种方法遵循在ASP.NET 1.x中使用的模式来绑定数据到一个DataGrid。)不管使用哪一种方式来访问数据,最终的结果,如在一用户浏览器中所见的,皆是相同的。