12.2 数据源控件
数据源控件封装所有获取和处理数据的功能,主要包括连接数据源,并使用Select、Update、Delete和Insert等对数据进行管理。
数据源控件是管理连接到数据源及读取和写入数据等任务的ASP.NET控件。数据源控件在用户界面上不会有任何呈现,而是充当特定数据源(如数据库、业务对象或XML文件)与ASP.NET网页上的其他控件之间的桥梁。数据源控件实现了丰富的数据检索和修改功能,其中,包括查询、排序、分页、筛选、更新、删除及插入功能。ASP.NET包括下列数据源控件,如表12-1所示。
表12-1 数据源控件
12.2.1 SqlDataSource控件
SqlDataSource控件是一个数据源控件,表示与一个SQL关系数据库的连接。默认情况下,SqlDataSource控件与用于SQL Server的.NET Framework数据提供程序一起使用,但SqlDataSource控件并不只能用于Microsoft SQL Server。通过SqlDataSource控件,可以使用Web服务器控件访问位于数据库中的数据,而无需直接使用ADO.NET类,只需提供用于连接到数据库的连接字符串,并定义使用数据的SQL语句或存储过程即可,而不必编写代码或只需编写少量代码。在运行时,SqlDataSource控件会自动打开数据库连接,执行SQL语句或存储过程,返回数据,然后关闭连接。
SqlDataSource可以支持能够使用ADO.NET提供程序(如SqlClient、OleDb、Odbc或OracleClient)连接到的任何SQL关系数据库,并可将结果作为DataReader或DataSet对象返回。当结果作为DataSet返回时,该控件支持排序、筛选和缓存。
对于任何一个数据库产品,只要有适用的ADO.NET提供程序,都可以将SqlData Source控件与它连接。当SqlDataSource与System.Data.OleDb提供程序一起使用时,SqlDataSource可以与OLE DB数据库协同使用。同样,也可以与ODBC驱动程序和数据库协同使用,包括IBM DB2、MySQL和PostgreSQL、Oracle 8.1.7以上版本的数据库。
经常用到的SqlDataSource控件属性如下。
ConnectionString:获取或设置特定于ADO.NET提供程序的连接字符串,SqlDataSource控件使用该字符串连接基础数据库。
DeleteCommand:获取或设置SqlDataSource控件从基础数据库删除数据所用的SQL字符串。
InsertCommand:获取或设置SqlDataSource控件将数据插入基础数据库所用的SQL字符串。
SelectCommand:获取或设置SqlDataSource控件从基础数据库检索数据所用的SQL字符串。
UpdateCommand:获取或设置SqlDataSource控件更新基础数据库中的数据所用的SQL字符串。
配置SqlDataSource控件时,将ProviderName属性设置为数据库类型(默认为System.Data.SqlClient)并将ConnectionString属性设置为连接字符串,该字符串包含连接至数据库所需的信息。连接字符串的内容根据数据源控件访问的数据库类型的不同而有所不同,比如:
这里使用了SqlDataSource控件的SelectCommand属性指定查询使用的SQL语句。
然后,在Web.config文件中的<connectionStrings>与</connectionStrings>节点之间书写如下代码。
上述代码实现了SqlDataSource控件通过连接字符串连接数据库的功能。
12.2.2 使用SqlDataSource控件连接到SQL Server数据库
使用SqlDataSource控件可以方便快速地连接到SQL Server数据库,并且可以更新数据库,不需要编写任何代码,具体步骤如下。
示例12-2:使用SqlDataSource1控制
(1)新建一个空网站,添加Web窗体Default.aspx文件,在Web窗体上放置一个SqlDataSource控件:SqlDataSource1,如图12-2所示。
图12-2 SqlDataSource控件
(2)SqlDataSource控件添加到窗体上后,自动显示SqlDataSource任务面板,单击“配置数据源”命令,如图12-3所示。
图12-3 SqlDataSource任务面板
(3)启动“配置数据源”向导,如图12-4所示。
图12-4 配置数据源
(4)单击“新建连接”按钮,在弹出的“选择数据源”对话框中选择“Microsoft SQL Server”,单击“继续”按钮,如图12-5所示。
图12-5 新建连接
(5)在弹出的“添加连接”对话框中配置服务器名为本机已安装的服务器名,选择“使用Windows身份验证”登录到服务器,数据库为Test数据库,如图12-6所示。
图12-6 添加连接
(6)单击“测试连接”按钮,如果弹出“测试连接成功”信息对话框,说明数据库连接成功,如图12-7所示。单击“确定”按钮,完成数据库连接配置。
图12-7 测试成功
(7)配置完成后返回到数据源配置向导,在数据源下拉框中已经出现前面配置的数据源,单击“下一步”按钮,如图12-8所示。
图12-8 选择数据库连接
(8)系统弹出提示“是否保存数据连接字符串”。若以后还需要使用此连接,选择保存,单击“下一步”按钮,如图12-9所示。
图12-9 选择保存
(9)在“配置Select语句”界面中,选择需要读取的数据表,这里选择UserInfo表,在“列”列表框可以看到,其中,列出了该表中所有的列,如图12-10所示。单击WHERE按钮可以添加查询条件,设置好查询条件后单击“确定”按钮,如图12-11所示。
图12-10 配置Select语句
图12-11 配置WHERE语句
(10)单击ORDER BY按钮,设置排序方式为UserID,升序,如图12-12所示;单击图12-10中的“高级”按钮,在弹出的“高级SQL生成选项”对话框中,第1个复选框用于自动生成具有增、删、改功能的附加SQL语句。通过这些语句命令便可以对数据源中的数据进行增、删、改操作,第2个复选框用于防止数据库的并发冲突,如图12-13所示。
图12-12 排序方式设置
图12-13 高级SQL生成选项
注意
一定要设置数据的主键,否则,无法生成具有增、删、改功能的附加SQL语句。
(11)数据源配置完成后,单击“下一步”按钮,进入“测试查询”界面,单击“测试查询”按钮,弹出“参数值编辑”对话框,如图12-14所示。
图12-14 测试查询
(12)参数编辑完毕,单击“确定”按钮,若配置正确,可以预览该数据源返回的数据,如图12-15所示。
图12-15 预览查询
(13)单击“完成”按钮,完成数据源的配置,以下是SqlDataSource控件的“源”视图代码。
其中,SqlDataSource对象的ConnectionString属性,定义了基础数据库的连接字符串为TestConnectionString,该字符串被保存在Web.Config中的<configuration>节点里面,其定义如下。
12.2.3 ObjectDataSource控件
ObjectDataSource是ASP.NET数据源控件,用于向数据绑定控件表示数据识别中间层对象或数据接口对象。通常ObjectDataSource控件与数据绑定控件结合使用,这样,只用少量代码或不用代码就可以在网页上显示、编辑和排序数据。
ObjectDataSource控件表示具有数据检索和更新功能的中间层对象。ObjectDataSource控件也可以用作数据绑定控件(如GridView、FormView或DetailsView控件)的数据接口,可以使用这些控件在ASP.NET网页上显示和编辑中间层业务对象中的数据。
ObjectDataSource控件与SqlDataSource控件的不同点在于,SqlDataSource控件在两层应用程序层次结构中使用,直接可以在表示层(ASP.NET网页)与数据层直接进行通信。但是按照程序的设计要求,一般把表示层与业务逻辑分离,将业务逻辑封装在业务对象中,这些业务对象在表示层和数据层之间的中间,从而生成一种三层应用程序结构。ObjectDataSource控件通过提供一种将相关页上的数据控件绑定到中间层业务对象的方法,为三层结构提供支持。在不使用扩展代码的情况下,ObjectDataSource使用中间层业务对象以声明方式对数据执行选择、插入、更新、删除、分页、排序、缓存和筛选操作。
ObjectDataSource控件使用反射调用业务对象的方法,以对数据执行选择、更新、插入和删除操作。设置ObjectDataSource控件的TypeName属性来指定要用作源对象的类名称。
ObjectDataSource控件没有可视化呈现,它是作为控件实现的,以便以声明方式创建,还可以选择让它参与状态管理。因此,ObjectDataSource不支持可视化功能,如EnableTheming或SkinID属性。
ObjectDataSource控件基于SelectMethod、InsertMethod、UpdateMethod或Delete Method属性中所标识的方法名称及组成业务对象方法签名的参数名来调用业务对象方法。在业务对象中创建方法时,必须确保业务对象方法所接受的参数名和类型与ObjectDataSource控件传递的参数名和类型匹配。
12.2.4 在ObjectDataSource中使用参数类查询数据
同其他的数据源控件一样,ObjectDataSource控件在运行时也接受参数输入,并在参数集合中对参数进行集中管理。每一项数据操作都有一个相关的参数集合。对于选择操作,可以使用SelectParameters集合;对于更新操作,可以使用UpdateParameters集合,依此类推。
在使用参考查询时,可以指定每个参数的名称、类型、方向和默认值。对于从特定对象(例如,控件、会话变量或用户配置文件)获取值的参数,需要设置其他属性。例如,对于ControlParameter对象,需要设置ControlID属性以标识要获取参数值的控件,以及设置PropertyName属性以标识包含参数值的属性。
下面的代码演示一个可以通过ObjectDataSource控件调用的Select方法,该方法从数据源获取参数并选择单个记录。
同样,下面的代码演示使用DataObjectMethodAttribute特性将某个方法标识为Delete方法。
12.2.5 LinqDataSource数据源简介
LinqDataSource控件通过ASP.NET数据源控件结构向Web开发人员公开语言集成查询(LINQ)。LINQ提供了一种在不同类型的数据源中查询和更新数据的统一编程模型,并将数据扩展到C#和Visual Basic语言中。LINQ通过将面向对象编程的准则应用于关系数据,简化了面向对象编程与关系数据之间的交互。
与SqlDataSource或ObjectDataSource控件相比,使用LinqDataSource控件,可以编写较少的代码来操作数据。LinqDataSource控件可推断有关要连接到数据源的信息,并动态创建用于选择、更新、插入和删除数据的命令。