正文

用数据源控件进行数据访问2006-06-18 21:15:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/15975.html

分享到:

对 ASP.NET 网页的常规要求是能够显示或更新数据。您可以使用数据源控件轻松地添加对网页的数据访问。数据源控件封装数据访问(选择、更新、删除和插入记录)所需的常见功能。随后,您可以将页上的其他控件绑定到数据源控件,绑定的控件在需要显示数据时可以调用数据源控件。


例如,如果要使用 Microsoft SQL Server 数据库中的数据,则可以向页中添加一个 SqlDataSource 控件。使用连接信息(服务器名称、数据库、身份验证信息)配置 SqlDataSource 控件,并指定用于选择和更新数据的 SQL 查询。然后,可以使用简单的属性设置将诸如 GridViewDropDownList 的控件绑定到该 SqlDataSource 控件。页的 HTML 可能类似于下面的形式:









 
<aspTongue TiedqlDataSource id="sqlCategories" runat="server"
ConnectionString="server=MySqlServer; Integrated Security=SSPI; Database=Northwind" SelectCommand="Select * From Categories"
/>
<aspBig SmileropDownList DataSourceId=" sqlCategories" runat="server"/>

当页运行时,DropDownList 控件自动在 SqlDataSource 控件上调用 Select 查询以获取数据。通过使用数据源控件和简单的数据绑定,无需编写任何代码即可创建功能强大的数据绑定 ASP.NET 网页。


数据源控件的功能



数据源控件旨在简化 ASP.NET 网页中的数据访问。同时,数据源控件保留了以编程方式使用数据库功能的灵活性。下面的列表汇总了数据源控件作为一个组的功能。主题 http://bbs.mscommunity.com/Forums/ShowThread.aspx?PostID=10832 提供了有关 ASP.NET 中各个数据源控件的功能的更多详细信息。通过数据源控件,您可以:



  • 无需编写任何代码,即可向 ASP.NET 网页添加数据选择和更新。


  • 使用一致的模型将服务器控件绑定到数据源,而不管基础数据采用何种形式。例如,通过使用不同的数据源控件,可以提供对 SQL Server、Microsoft Access、XML 文件或中间层业务对象的数据访问。您可以使用相同的属性设置将控件(如 GridViewListBox 控件)绑定到这些完全不同的数据源,而无需了解数据源控件最终是如何与基础数据进行交互的。


  • 执行方法以获取和更新数据。您可以将参数传递给方法,参数可以自动从控件属性、查询字符串、会话状态或其他位置提取其参数值。


  • 使用属性设置以确定数据源控件是否支持更新、插入、排序等功能。


数据源控件实质上会处理与数据源交互所需的全部低级别的工作。例如,SqlDataSource 控件将自动打开与 SQL Server 的连接,执行一个命令,获取结果(如果有的话),然后关闭连接。如果您已经创建了具有数据源控件及绑定到该控件的其他控件的 ASP.NET 网页,那么您可以经常显示数据并执行更新,根本不需要编写任何代码。即使您希望以编程方式使用数据源控件,也可以调用简单的高级别方法,如 Select 方法。数据源控件将执行它所需的一切任务,以执行查询并将数据提供给您使用。


对于所有数据源控件而言,不论它们与何种数据源进行交互,都提供相同的基本对象模型和 API。您可以按照与使用 AccessDataSource 控件和 ObjectDataSource 控件几乎完全相同的方式来使用 SqlDataSource 控件,唯一的差别在于配置控件的方式上的细微区别。


DataSource 控件呈现出多种风格,包括 ystem.Web.UI.WebControls.SqlDataSource">SqlDataSource、ystem.Web.UI.WebControls.AccessDataSource">AccessDataSource、ystem.Web.UI.WebControls.ObjectDataSource">ObjectDataSource、ystem.Web.UI.WebControls.XmlDataSource">XmlDataSource 和 ystem.Web.UI.WebControls.SiteMapDataSource">SiteMapDataSource。XmlDataSourceSiteMapDataSource 均支持 ystem.Web.UI.IHierarchicalDataSource">IHierarchicalDataSource 界面,并可以轻松地用于 XML 文件。其他控件都支持数据库。


业务对象



除了使用数据库之外,还可以从对象中检索数据。如果您要访问自定义业务对象中的信息,或者从访问网络上其他系统的对象或 API 中获得信息,则此功能十分有用。

数据源控件事件



数据源控件在命令执行之前和之后都会引发事件。在执行相应的查询之前,会引发 SelectingUpdatingDeletingInserting 事件。您可以在这些事件的处理程序中修改命令(命令将通过事件参数传递给您),对数据进行更改(可能是为了应用业务规则)或取消命令的执行。


在执行相应的命令之后,会引发 SelectedUpdatedDeletedInserted 事件。您可以使用这些事件的处理程序,获取命令的返回值。例如,Update、Delete 和 Insert 查询将返回“rows affected”(受影响的行数)值,您可以使用该值来确定命令是更新了任何行还是失败(因为受命令影响的行数为零)。如果某个命令执行存储过程,您还可以使用这些事件来获取任何返回值的值或存储过程所设置的输出参数的值。受影响的行数、返回值和输出参数都将作为事件参数的一部分进行传递。


检索数据



在 ASP.NET 中检索数据可以通过多种方法来完成。本部分即介绍了几种检索数据的特定技术。


在大多数情况下,数据访问可以封装在数据源控件中,然后由该控件使用 SQL 语句来查询特定数据库;或者也可以封装在页所使用的对象中,然后使用该对象来访问 SQL 数据库或其他数据源。


采用数据绑定控件检索数据



只要您具有数据源,就可以使用数据绑定控件来访问该数据源。例如,如果您的页中具有一个名为 SqlDataSource1SqlDataSource,那么可以在 ystem.Web.UI.WebControls.GridView">GridView 控件中使用该数据源的数据:









 
<asp:GridView ID="GridView1" Runat="server" 
DataSourceID="SqlDataSource1" DataKeyNames="ProductID"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField ReadOnly="True"
HeaderText="ProductID" InsertVisible="False"
DataField="ProductID"
SortExpression="ProductID">
</asp:BoundField>
<asp:BoundField HeaderText="ProductName"
DataField="ProductName"
SortExpression="ProductName">
</asp:BoundField>
<asp:BoundField HeaderText="UnitPrice"
DataField="UnitPrice"
SortExpression="UnitPrice">
</asp:BoundField>
</Columns>
</asp:GridView>

更新数据



借助于 ASP.NET 数据源 DataSource 控件和数据绑定控件,可以很容易地更新数据库中的数据。使用 DataSource 控件,不仅可以创建一个选择语句以提供控件的初始数据,而且还可以创建一个更新语句,以供控件在数据发生更改时使用。将此功能与诸如 GridViewystem.Web.UI.WebControls.FormView">FormView 和 ystem.Web.UI.WebControls.DetailsView">DetailsView 等的控件结合使用,可进行数据编辑。


要编辑数据,可以配置一个数据控件,以便为所显示的每一行数据显示一个“编辑”按钮(或其他类似的按钮)。用户可以单击数据行中的“编辑”按钮,且数据绑定控件将更改其 UI 以支持编辑功能。编辑完成之后,用户可以单击更新链接触发 DataSource 控件(如 SqlDataSource),以使用该控件的 ystem.Web.UI.WebControls.SqlDataSource.UpdateCommand">UpdateCommand 属性来包装原来的值和新的值,并将它们发送给数据源控件,随后,数据源控件将使用这些值来执行更新。


配置数据源控件以进行更新



要配置 DataSource 控件(如 SqlDataSource 控件)以进行更新,请向控件声明中添加一个 UpdateCommand 属性,或在代码中设置 UpdateCommand 属性。这需要使用对于您的数据库而言有效的更新语句。例如:









 
<aspTongue TiedqlDataSource ID="SqlDataSource1" runat="server"     
SelectCommand="SELECT [CompanyName], [ContactName], [Phone] FROM [Customers]"
ConnectionString="<%$ ConnectionStrings:AppConnectionString2 %>"
UpdateCommand="UPDATE [Customers] SET [CompanyName] = @CompanyName, [ContactName] = @ContactName ">

更新语句的参数



通常,要进行更新,需要提供在运行时传递的参数值。例如,上例中的 SQL Update 语句在其 SET 子句中使用了参数值。


因此,除了为数据源控件指定 UpdateCommand 值之外,通常还需要添加参数,以便 DataSource 控件了解在更新命令中引用的要更新的数据:









 
<UpdateParameters>
<aspStick out tonguearameter Type="String" Name="au_fname"></aspStick out tonguearameter>
<aspStick out tonguearameter Type="String" Name="au_lname"></aspStick out tonguearameter>
<aspStick out tonguearameter Type="String" Name="address"></aspStick out tonguearameter>
<aspStick out tonguearameter Type="String" Name="city"></aspStick out tonguearameter>
<aspStick out tonguearameter Type="String" Name="state"></aspStick out tonguearameter>
</UpdateParameters>

使用 UpdateParameters 元素,可以建立提取参数值的位置,位置可以是其他控件、查询字符串、页属性值等等。现在,数据绑定控件可以利用数据源来提供编辑功能。


配置数据绑定控件以进行更新



只要在数据源控件上启用了数据绑定控件(如 GridView 控件),数据绑定控件即可自动修改其用户界面以支持编辑功能。


例如,您可以通过向 GridView 控件中添加命令列并打开编辑链接来添加编辑功能:









 
<asp:GridView ID="GridView1" runat="server" 
DataSourceID="SqlDataSource1"
DataKeyNames="au_id"
AutoGenerateColumns="False">
<Columns>
<asp:CommandField
ShowEditButton="True"></asp:CommandField>
<asp:BoundField HeaderText="au_fname" DataField="au_fname"
SortExpression="au_fname"></asp:BoundField>
<asp:BoundField HeaderText="au_lname" DataField="au_lname"
SortExpression="au_lname"></asp:BoundField>
<asp:BoundField HeaderText="address" DataField="address"
SortExpression="address"></asp:BoundField>
<asp:BoundField HeaderText="city" DataField="city"
SortExpression="city"></asp:BoundField>
<asp:BoundField HeaderText="state" DataField="state"
SortExpression="state"></asp:BoundField>
<asp:BoundField ReadOnly="True" HeaderText="au_id"
DataField="au_id" SortExpression="au_id"></asp:BoundField>
</Columns>
</asp:GridView>

除了向列集合中添加 ystem.Web.UI.WebControls.CommandField">CommandField 之外,还采用 ystem.Web.UI.WebControls.GridView.DataKeyNames">DataKeyNames 集合(此例中的该集合包含此 Authors 表的单个 ID 字段)对 GridView 声明进行了属性化。


并发控制



当要进行更新时,还可以选择并发行为。SqlDataSource 控件有一个 ystem.Web.UI.WebControls.SqlDataSource.ConflictDetection">ConflictDetection 属性,该属性可以设置为 ystem.Web.UI.ConflictOptions.CompareAllValues">CompareAllValues 或 ystem.Web.UI.ConflictOptions.OverwriteChanges">OverwriteChanges。如果将 CompareAllValues 设置为 true,则更新语句除了包含字段的新值之外,还必须包含字段所有原来的值。


主键注意事项



很多时候数据库记录包含一个只读的主键。该键用于在数据库内标识记录。主键通常由数据库内的进程所生成,而不能通过数据库事务来进行操作或更改。如果您尝试更新主键,可能会遇到错误。


插入数据



借助于 ASP.NET DataSource 控件和 DataBound 控件,可以很容易地将新记录插入到数据库中。使用 DataSource 控件,可以创建一个插入命令以插入新记录。与能够更改用户界面的 DetailsView FormView 控件结合使用来支持数据输入,使用 DataSource 作为插入新记录的方法。


要插入新数据,可以在 DataBound 控件(如 DetailsView 控件)中显示一个插入链接,当用户输入新数据之后,DataSource 控件(如 SqlDataSource 控件)将创建记录。


配置数据源以进行插入



要配置 DataSource 控件,应编写一个用于数据库的插入语句。可使用在 DataSource 控件中定义和绑定的 ystem.Web.UI.WebControls.SqlDataSource.InsertParameters">InsertParameters 作为 SQL 语句的参数。例如,采用有效的 SQL 插入语句配置的 SqlDataSource 可能具有如下形式:









 
<aspTongue TiedqlDataSource ID="SqlDataSource1" runat="server" 
InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName], [ContactName], [phone])
VALUES (@CustomerID, @CompanyName, @ContactName, @phone)"
ConnectionString="<%$ ConnectionStrings:AppConnectionString3 %>" SelectCommand="SELECT CustomerID, CompanyName, ContactName, phone FROM [Customers]">
<InsertParameters>
<aspStick out tonguearameter Type="String" Name="CustomerID" />
<aspStick out tonguearameter Type="String" Name="CompanyName" />
<aspStick out tonguearameter Type="String" Name="ContactName" />
<aspStick out tonguearameter Type="String" Name="phone" />
</InsertParameters>
</aspTongue TiedqlDataSource>

采用成功包装 SQL 语句以创建新记录所必需的参数类型来加载 InsertParameters 集合。


配置数据绑定控件以插入数据



使用诸如 DetailsView 的控件,您无需编写任何代码即可获得数据创建 UI。通过另外指定一个 ystem.Web.UI.WebControls.CommandField.ShowInsertButton">ShowInsertButton 属性设置为 TrueCommandField,将自动出现一个新的记录创建 UI:









 
<aspBig SmileetailsView ID="DetailsView1" runat="server" 
DataSourceID="SqlDataSource1"
DataKeyNames="CustomerID" AutoGenerateRows="False">
<Fields>
<asp:BoundField ReadOnly="True" HeaderText="CustomerID"
DataField=" CustomerID " SortExpression=" CustomerID " />
<asp:BoundField HeaderText="CompanyName"
DataField="CompanyName" SortExpression="CompanyName" />
<asp:BoundField HeaderText="ContactName"
DataField="ContactName" SortExpression="ContactName" />
<asp:BoundField HeaderText="phone"
DataField="phone" SortExpression="phone" />
<asp:CommandField ShowInsertButton="True" />
</Fields>
</aspBig SmileetailsView>

如果用户单击呈现控件时所显示的链接(标记为“新建”),则以上每个字段都将支持相应的控件(如 TextBoxCheckBox)从而可以进行数据输入。记录准备就绪后,DetailsView 控件利用包含插入语句的相应 DataSource


删除数据



借助于 ASP.NET DataSource 控件和 DataBound 控件,可以很容易地删除从查询返回给用户的数据。使用 DataSource 控件,除了标准的选择命令之外,还可以创建删除命令。删除命令(与参数绑定一起)用于删除数据。将此功能与 DataBound 控件(如 GridView)结合使用,可简化最终用户的数据编辑工作。


对数据进行排序



检索数据时,可以按照在 SQL 语句中指定的方式对结果集进行排序。不过,您可能想将数据排序功能扩展到客户端和用户。例如,您可能希望通过为用户提供用于排序的链接或按钮来允许用户按价格、名称或可用日期对结果进行排序。在 ASP.NET 中,可以通过使用 GridView 及其 ystem.Web.UI.WebControls.GridView.AllowSorting">AllowSorting 属性来启用客户端上的数据排序。


启用排序



可以通过在 ASP.NET 页上将控件的 AllowSorting 属性设置为 true 来启用排序。









 
<asp:GridView ID="GridView1" Runat="server" 
DataSourceID="SqlDataSource1" AutoGenerateColumns="False"
AllowSorting="True">
<Columns>
<asp:BoundField HeaderText="ProductName" DataField="ProductName"
SortExpression="ProductName"/>
<asp:BoundField HeaderText="QuantityPerUnit"
DataField="QuantityPerUnit"
SortExpression="QuantityPerUnit"/>
<asp:BoundField HeaderText="UnitsInStock" DataField="UnitsInStock"
SortExpression="UnitsInStock"/>
<asp:BoundField HeaderText="ReorderLevel" DataField="ReorderLevel"
SortExpression="ReorderLevel"/>
<asp:BoundField HeaderText="CategoryName" DataField="CategoryName"
SortExpression="CategoryName"/>
</Columns>
</asp:GridView>

在声明性情况中,AllowSorting 属性 (property) 是 asp:GridView 元素的属性 (attribute)。每个 ystem.Web.UI.WebControls.BoundField">BoundField 元素都指示它所使用的 ystem.Web.UI.WebControls.BoundField.DataField">DataField 以及要使用的 SortExpression


对数据进行分页



可以通过使用 ASP.NET 数据绑定控件 FormViewDetailsViewGridViewystem.Web.UI.WebControls.GridView.AllowPaging">AllowPaging 布尔值属性来对数据进行分页。


分页模式



通过 ystem.Web.UI.WebControls.PagerSettings">PagerSettings 类(该类同时是 GridViewFormView 的属性),您可以调整分页用户界面的外观。例如,您可以修改分页 UI 所用的模式:









 
GridView1.PagerSettings.Mode = PagerButtons.NextPreviousFirstLast

可用的模式有:









 
PagerButtons.NextPrevious
PagerButtons.NextPreviousFirstLast
PagerButtons.Numeric
PagerButtons.NumericFirstLast

以上不同模式确定了可用于分页和导航数据的按钮类型。除了用于向前导航和向后导航的相对控件之外,还有使用户可以单击特定页以进行查看的数字控件。


页导航控件外观



此外,还有大量的图像和文本属性可用于以上不同模式。例如,如果您希望使用 PagerButtons.NextPrevious 导航模式,但又想自定义所显示的文本,那么可以如下所示重写属性:









 
GridView1.PagerSettings.NextPageText = "Click for next page!"
GridView1.PagerSettings.PreviousPageText = "Click for previous page!"

除了文本之外,还可以使用图像 URL 来自定义分页控件的外观。


缓存数据



ASP.NET 支持缓存页以及具有特定参数的页。当数据库中的数据已更新时,SQL Server 能够发出缓存通知以使 ASP.NET 内的数据缓存失效。


使用 ASP.NET 进行缓存



通过页缓存功能,可以为每个用户缓存完整页,或者为页参数的任何子集缓存页。例如,您可能希望缓存这样一个页,该页每 24 小时为访问您站点的每个用户从数据库中提取一次每日特别事件。同样,如果您具有一个产品类别由传递的页参数确定的联机目录,那么您会希望只为每个唯一的类别缓存页。


SQL 缓存通知



SQL 缓存通知是 SQL Server 的一项新功能,它在 SQL Server 与 ASP.NET 之间启用缓存逻辑协调。如果要从 ASP.NET 应用程序中使用该功能,必须先在 SQL Server 上启用它。您可以在数据库计算机上启用一个数据库或特定表的通知功能。随后,当该数据发生更改时,ASP.NET 将收到通知。您可以编写应用程序以使用此功能,方法是:缓存结果集直至 SQL Server 通知 ASP.NET 数据已更新。此时 ASP.NET 将刷新其缓存。

阅读(4206) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册