Source=WIN-YXDGNGPG621;InitialCatalog=mytable;IntegratedSecurity=True"
providerName="System.Data.SqlClient"/>
数据源控件可以指定开发人员所需要使用的Select语句或存储过程,开发人员能够在配置Select语句窗口中进行Select语句的配置和生成,如果开发人员希望手动编写Select语句或其他语句,可以单击【指定自定义SQL语句或存储过程】按钮进行自定义配置,Select语句的配置和生成如图8-6所示。
图8-5成功添加连接图8-6配置使用Select语句
对于开发人员,只需要勾选相应的字段,选择Where条件和OrderBy语句就可以配置一个Select语句。
但是,通过选择只能够查询一个表,并实现简单的查询语。
如果要实现复杂的SQL查询语句,可以单击【指定自定义SQL语句或存储过程】进行自定义SQL语句或存储过程的配置,如图8-7所示,开发人员选择了一个getdetail的存储过程作为数据源。
单击【下一步】按钮,就需要对相应的字段进行配置,这些字段就像ADO.NET中的参数化查询一样。
在数据源控件中,也是通过@来表示参数化变量,当需要配置相应的字段,例如配置WHERE语句等就需要对参数进行配置,如图8-8所示。
图8-7定义自定义语句或存储过程图8-8添加WHERE子句
添加WHERE子句时,SQL语句中的值可以选择默认值、控件、Cookie或者是Session等。
当配置完成后,就可以测试查询,如果测试后显示的结果如预期一样,则可以单击完成,如图8-9所示。
图8-9测试查询并完成
完成后,SqlDataSource控件标签代码如下所示。
SqlDataSourceID="SqlDataSource1"runat="server"
ConnectionString="<%$ConnectionStrings:
mytableConnectionString%>"
SelectCommand="SELECT[TITLE],[ID]FROM[mynews]">
SqlDataSource>
2.配置SqlDataSource控件属性
SqlDataSource控件还包括一些可视化属性,这些属性包括删除查询(DeleteQuery)、插入查询(InsertQuery)、检索查询(SelectQuery)以及更新查询(UpdateQuery)。
当需要使用可视化属性时,需选择【使用自定SQL语句或存储过程】复选框,在导航中可以使用查询生成器生成查询语句,如图8-10所示。
图8-10自定义语句或存储过程
选择【查询生成器】按钮,系统会提示选择相应的表并通过相应的表来生成查询语句,如图8-11和图8-12所示。
图8-11选择相应的表图8-12使用查询生成器
配置相应的查询语句后,SqlDataSource控件的HTML代码如下所示。
SqlDataSourceID="SqlDataSource1"runat="server"
ConnectionString="<%$ConnectionStrings:
mytableConnectionString%>"
InsertCommand="INSERTINTOmynews(ID)VALUES('controltitle')"
SelectCommand="SELECT[TITLE],[ID]FROM[mynews]">
SqlDataSource>
上述代码自动增加了一个InsertCommand并指定了Insert语句。
开发人员可以为SqlDataSource控件指定四个命令参数:
SelectCommand、UpdateCommand、DelectCommad和InsertCommand。
每个都是数据源控件的单一属性,开发人员可以配置相应的语句指定Select、Update、Delete以及Insert方法。
SqlDataSource控件同时能够使用缓存来降低页面与数据库之间连接频率,这样可以避免开销很大的查询操作,以及建立连接和关闭连接操作。
只要数据库是相对稳定不变的,则可以使用SqlDataSource控件的缓存属性(EnableCaching)来进行缓存。
在默认情况下,缓存属性(EnableCaching)是关闭的,需要开发人员自行设置缓存属性。
8.1.2Access数据源控件(AccessDataSource)
在上一章中介绍了如何使用ADO.NET中OleDb来连接和读取Access数据库。
Access数据库是一种桌面级的数据库,当对应用程序性能,以及数据库性能要求不是很高,并且数据量不需很大时,可以考虑选择Access数据库。
SqlDataSource能够与任何一种ADO.NET支持的数据源进行交互,这些数据源包括SQLServer、Access、Oledb、Odbc以及Oracle。
但是Access数据库有专门的数据源控件,就是AccessDataSource。
AccessDataSource控件同配置SqlDataSource控件基本相同,如图8-13所示。
与SqlDataSource不同的是,SqlDataSource主要采用的是ConnectionString属性连接数据库,而Access则采用的是AccessDataSource方式连接数据库。
因为Access数据库是以文件的形式存在于系统中的,所以主要采用DataFile属性直接以文件地址的方式进行连接。
要连接Access数据库,则必须选择Access数据库文件,如图8-14所示。
图8-13选择数据库图8-14选择Access文件
在选择了Access数据库文件后,单击【确定】按钮,系统就会为开发人员配置连接字串,在核对无误后,单击【下一步】按钮进入Select语句的配置。
同SqlDataSource控件一样,同样能够配置Select语句或自定义存储过程,如图8-15所示。
同样8-15配置Access数据库的Select语句
其他步骤与SqlDataSource相同,当创建完成后,AccessDataSource控件的HTML代码如下所示。
AccessDataSourceID="AccessDataSource1"runat="server"
DataFile="~/acc.mdb"
SelectCommand="SELECT[bh],[title]FROM[mytable]">
AccessDataSource>
当需要使用Access数据库,推荐将Access数据库文件保存在App_Data文件夹中。
以保证数据库文件是私有的,因为ASP.NET不允许直接请求App_Data文件夹。
注意:
AccessDataSource控件不支持访问受密码保护的Access数据库文件,如果需要访问受密码保护的Access数据库文件,则需要使用SqlDataSource控件。
8.1.3目标数据源控件(ObjectDataSource)
大多数ASP.NET数据源控件,如SqlDataSource都是在两层应用程序层次结构中使用。
在该层次结构中,表示层(ASP.NET网页)可以与数据层(数据库和XML文件等)直接进行通信。
但是,常用的应用程序设计原则是将表示层与业务逻辑相分离,而将业务逻辑封装在业务对象中。
这些业务对象在表示层和数据层之间形成一层,从而生成一种三层应用程序结构。
ObjectDataSource控件通过提供一种将相关页上的数据控件绑定到中间层业务对象的方法,为三层结构提供支持。
在不使用扩展代码的情况下,ObjectDataSource使用中间层业务对象以声明方式对数据执行选择、插入、更新、删除、分页、排序、缓存和筛选操作。
也就是说,SqlDataSource是两层模型中使用的.页面通过直接访问数据库.。
ObjectDataSource用于三层模型中,也就是将中间业务对象通过其访问数据库的。
然后中间层业务对象再用在表示层中,例如在开发中使用的自定义控件。
ObjectDataSource的业务对象是可以用检索或更新数据的业务对象,例如Bin或App_Code目录中定义的对象,选择业务对象如图8-16所示。
图8-16选择业务对象
可以创建一个类库,并在ASP.NET网站中添加引用,这样就可以通过ObjectDataSource对象选择该类库中的方法,如图8-17和图8-18所示。
图8-17添加类库图8-18添加引用
ObjectDataSource控件对象模型类似于SqlDataSource控件。
ObjectDataSource公开一个TypeName属性,该属性指定要实例化来执行数据操作的对象类型,也就是类的名称。
与SqlDataSource的命令属性类似,同样ObjectDataSource包括四个重要属性,这四个属性分别为SelectMethod、UpdateMethod、InsertMethod和DeleteMethod,分别用于指定要执行这些数据操作关联类型的方法。
选择对象后,就可以配置SelectMethod、UpdateMethod、InsertMethod和DeleteMethod属性的方法。
示例代码如下所示。
publicclassClass1//创建类库
{
publicstringGetTitle()//创建方法
{
name="title";//变量赋值
returnname;//返回name
}
publicvoidInsertTitle()//创建方法
{
name="insert";//变量赋值
}
publicstringname;//创建共有变量name
}
ObjectDataSource控件可以使用Class1中的对象,如图8-19所示。
图8-19定义数据方法
ObjectDataSource控件可以使开发人员将诸如GridView和DropDownList这样的用户界面控件绑定到一个中间层组件。
能够无需编写任何代码即可绑定到一个组件,从而极大的简化用户界面。
与其他的数据源控件相同,ObjectDataSource控件在运行时可以接受参数,并在参数集合中对参数进行管理。
每一项数据操作都有一个相关的参数集合。
对于选择操作,可以使用SelectParameters集合,对于更新操作,可以使用UpdateParameters集合,而给予InsertParameters、UpdateParameters、DeleteParameters集合,需要分别确定相应操作所需调用的方法。
8.1.4LINQ数据源控件(LinqDataSource)
语言集成查询(LINQ)是一种查询语法,它可定义一组查询运算符,以便在任何基于.NET的编程语言中以一种声明性的方式来表示遍历、筛选和投影操作。
数据对象可以是内存中的数据集合,或者是表示数据库中数据的对象。
无需为每个操作编写SQL命令,即可检索或修改数据。
使用LinqDataSource控件,开发人员可以通过在标记文本中设置属性从而在ASP.NET网页中使用LINQ。
LinqDataSource控件使用LINQtoSQL来自动生成数据命令。
LINQ数据源可以是LINQ数据库或数组等以集合形式表现的数据库,有关LINQ的知识会有专门的章节讲解,在这里使用数组作为数据源,示例代码如下所示。
publicstring[]arr={"1","2","3","4"};//创建数组
在ASP.NET页面中使用LINQ数据源控件可以对LINQ数据源进行查询,LINQ数据源控件代码如下所示。
LinqDataSourceID="LinqDataSource1"runat="server">
LinqDataSource>
创建了LINQ数据源控件,同样单击【配置数据源……】按钮可以进行LINQ数据源控件的数据源配置,如图8-20所示。
当选择上下文对象后,需要配置数据选择,LINQ数据源控件同样支持Group和Where关键字,如图8-21所示。
图8-20选择上下文对象图8-21配置数据选择
配置完成后,LINQ数据源控件HTML代码如下所示。
LinqDataSourceID="LinqDataSource1"runat="server"
ContextTypeName="ClassLibrary1.Class1"Select="new(Length,Chars)"
TableName="arr">
LinqDataSource>
当完成LINQ数据源控件(LinqDataSource)的配置后,就可以通过控件绑定LINQ数据源控件来获取LINQ数据库中的信息。
LinqDataSource控件按以下顺序应用数据操作:
❑Where:
指定要返回的数据记录。
❑OrderBy:
排序。
❑GroupBy:
聚合共享值的数据记录。
❑OrderGroupsBy:
对分组数据进行排序。
❑Select:
指定要返回的字段或属性。
❑Auto-sort:
按用户选定的属性对数据记录进行排序。
❑Auto-page:
检索用户选定的数据记录的子集。
LINQ是ASP.NET3.5中增加的一种语言集成查询,该控件的高级属性和方法在ASP.NET3.5与LINQ中会详细讲解。
8.1.5Xml数据源控件(XmlDataSource)
Xml数据源控件可以让数据绑定控件轻易的连接到XML数据源。
在只读方案下通常使用XmlDataSource控件显示分层XML数据,但同样可以使用该控件显示分层数据和表格数据。
1.建立XmlDataSource控件
与AccessDataScource相同的是,XmlDataSource控件同样使用DataFile属性指定XML文件并加载XML数据,如图8-22所示。
数据源是XML文件,单击【浏览】按钮选择数据文件,如图8-23所示。
图8-22配置数据源图8-23选择XML数据源
选择数据源后,单击确定并完成数据源的配置即可,配置完成数据源后,XmlDataSource控件的HTML代码如下所示。
XmlDataSource
ID="XmlDataSource1"runat="server"DataFile="~/xmldate.xml">
XmlDataSource>
上述代码指定了DataFile属性的所属的文件,当配置完成后,XmlDataSource控件就可以和数据绑定控件结合使用了。
2.XmlDataSource控件的使用
当配置完成XmlDataSource后,就可以和数据绑定控件结合使用。
在使用数据绑定控件前,先配置XML数据文件,示例代码如下所示。
xmlversion="1.0"encoding="utf-8"?
>
新闻标题1