为什么打印机打印不完整出来的图纸不完整

ASP.NET 2.0 中的数据源控件下载本文中的代码:
(164KB) 本页内容ASP.NET 2.0 引入了一系列可以改善数据访问的新工具,包括几个数据源和数据绑定控件。新增种类的数据源控件可以消除 ASP.NET 1.x 中要求的大量重复性代码。例如,您可以很容易地将 SQL 语句或存储过程与数据源控件相关联,并且将它们绑定到数据绑定控件。更令人感到印象深刻的是,通过 ObjectDataSource 控件可以简化开发和减少代码,并且仍然可以在 n 层体系结构的不同层中抽象业务和数据访问逻辑。在 .NET 问世以前,用传统的 ASP 生成数据网格通常需要编写大量的代码,以便在遍历 ADO 记录集的同时即时生成 HTML 表。ASP.NET 1.x 通过允许您将基于 XML 的 DataSet 绑定到 ASP.NET DataGrid 控件,从而使该类型的开发变得更加容易。这就减少了生成网格所必需的代码。但是,传统的 ASP 和 ASP.NET 1.x 都要求代码实现分页、排序、编辑和行选择功能。通过 ASP.NET 2.0 中的改进功能,可以显著减少这些代码的数量,以产生带有完整分页、排序和编辑功能并填充了数据的网格。在这一期的 Data Points 中,我将首先演示通过 ASP.NET 2.0 并使用 SqlDataSource 和一些新的数据绑定控件开发 Web 应用程序是多么容易。请注意,我在此使用的是 Beta 1 版本。大多数企业应用程序都是在多层体系结构之上生成的,该体系结构有一个用于存放业务逻辑的中间层,以及一个使用一个或多个后端数据库的数据访问层。我将讨论 ObjectDataSource 可以多么理想地与现有的多层组件集成。通过将 ObjectDataSource 控件链接到业务对象,您可以充分利用现有的多层体系结构来生成完善的 Web UI,并且能够显著减少代码。 ObjectDataSource 控件还包含一些特殊的属性,使您可以绑定到 ASP.NET 2.0 和 ADO.NET 2.0 中新近增强的强类型 DataSet 和数据组件。 ASP.NET 2.0 中的其他新功能和改进包括新增的双向绑定表达式、增强的缓存,以及几个新增的可以数据绑定到新的数据源控件的 ASP.NET 2.0 控件。数据绑定控件要使用数据源控件,必须具有一个用来将它们绑定到的数据绑定控件。在 ASP.NET 2.0 中有几个新的数据绑定控件,包括 GridView、DetailsView 和 FormView 控件。如果您喜欢 ASP.NET 1.x DataGrid 控件,那么您也会喜欢 ASP.NET 2.0 GridView 控件。GridView 在本质上类似于 DataGrid,因为它可以绑定到新的数据源控件,并且可以用来实现排序、编辑和分页 ― 它们需要的代码都比 DataGrid 少得多(有关 GridView 的详细信息,请参阅 Dino Esposito 在 MSDN®Magazine 的 中发表的文章)。要将 GridView 绑定到数据源控件,需要将 GridView 的 DataSourceID 属性设置为数据源控件的 ID。还可以设置 GridView 的其他几个属性来增强外观和用户交互(我将在稍后的示例中加以演示): &asp:GridView ID="gvwOrders" Runat="server"
DataSourceID="sdsOrdersDataSource"
AutoGenerateColumns="True"&
其他控件(例如,DropDownList)也可以绑定到数据源控件。例如,DropDownList 控件可以绑定到检索雇员列表的 SqlDataSource 控件。雇员的全名可以显示在 DropDownList 中,而 EmployeeID 可以作为控件的基础数据值字段绑定到该控件。以下示例定义了一个 DropDownList,它将显示可供选择的客户名称的列表。客户数据被绑定到一个名为 sdsCustomerDataSource 的 SqlDataSource 控件,该控件可获得客户的 CompanyName 和 CustomerID 字段的列表: &asp:DropDownList ID="ddlCustomers" Runat="server" AutoPostBack="True"
DataSourceID="sdsCustomersDataSource"
DataTextField="CompanyName"
DataValueField="CustomerID"&
&/asp:DropDownList&
在 ASP.NET 2.0 中,将控件绑定到数据源控件非常简单,并且不需要任何处于代码隐藏中的代码。但是,如果您愿意,仍然可以编写代码以显式绑定到控件。实际上,数据绑定控件的数据源和 DataMember 属性与 ASP.NET 1.x 相比已经得到了改进。数据源控件在 ASP.NET 2.0 中有几个新的数据源控件,例如,SqlDataSource、ObjectDataSource、XmlDataSource、AccessDataSource 和 SiteMapDataSource(如 所示)。它们全都可以用来从它们各自类型的数据源中检索数据,并且可以绑定到各种数据绑定控件。数据源控件减少了为检索和绑定数据甚至对数据进行排序、分页或编辑而需要编写的自定义代码的数量。每个数据源控件都具有类似的属性,以便可以与其各自的数据源进行交互。生成 SiteMapDataSource 和 XmlDataSource 是为了检索分层数据,而生成其他数据源控件是为了检索带有列和行的基于集合的数据。专门生成 AccessDataSource 以便从 Access 数据库中检索数据。SqlDataSource 听起来好像只能使用 SQL Server?,但实际情况不是这样的。它实际上可以用来从任何 OLE DB 或符合 ODBC 的数据源中检索数据。命令类型和参数SqlDataSource 控件具有四个命令属性,您可以设置这些属性以告诉 SqlDataSource 如何获得、插入、更新和删除它的数据。可以将 SelectCommand 属性设置为 SQL 语句或存储过程。在任何一种情况下,都可以根据需要传入参数。InsertCommand、UpdateCommand 和 DeleteCommand 属性用于告诉 SqlDataSource 使用哪些 SQL 语句(或存储过程)来修改基础数据库中的数据。 中的代码示例显示了一个 SqlDataSource,它将它的 SelectCommand 和 UpdateCommand 属性设置为参数化的 SQL 语句。请注意,UpdateParameters 使用 Parameter 元素来指示要用于参数的字段的名称和数据类型。在将 GridView 绑定到该 SqlDataSource 以后,这些 UpdateParameters 值就被绑定到受影响行的具有相同名称的列。您自己对此进行试验的最简单方式是,在 Visual Studio? 2005 中创建一个 Web 窗体,连接到服务器资源管理器窗口中的本地 SQL Server Northwind 数据库,然后将一个表拖到该 Web 窗体。这会自动创建一个 SqlDataSource 控件以及一个 GridView。Visual Studio 会自动将 SqlDataSource 控件的 ProviderName 和 ConnectionString 属性设置为 SQL Server Northwind 数据库。而且,所有四个命令属性都将被设置为适当的 SQL 语句。然后,您为编辑该 Web 窗体而必须完成的所有工作就是,使用智能标记来选中“Enable Editing”复选框(参见图 3)。图 3 GridView设置数据源控件还可以使用来自其他控件的参数。例如,数据源控件可以检索给定客户的所有订单。在这种情况下,CustomerID 可以是传递给 SqlDataSource 控件的 SelectCommand 属性的 SQL 语句或存储过程的参数。还可以从其他控件(例如,DropDownList)检索 CustomerID,并将其直接传递到 SqlDataSource 控件的 SQL SelectCommand 中。您可以将控件的值直接链接到 SqlDataSource 控件的任一 SQL 语句(SelectCommand、InsertCommand、UpdateCommand 或 DeleteCommand)的参数,还可以指定究竟要将控件的哪个属性用于该参数。例如,如果您在上一个示例中不需要 DropDownList 的默认属性,而是需要它的 DataTextField,则可以将 ControlParameter 的 PropertyName 属性设置为 DataTextField。除了 ControlParameter 以外,还可以将其他参数类型用于数据源控件。如果您要使用新的 ASP.NET 个性化功能,则可以使用 ProfileParameter 从配置文件对象中检索参数的值。接下来,还有几个从标准 Request 对象的集合中检索它们的数据的参数对象类型。例如,CookieParameter 可以用来从 Cookie 中检索参数的值。QueryStringParameter 从任意请求字符串变量中获得它的值,而 FormParameter 从 HTML 窗体的输入字段中获得它的值。最后,SessionParameter 可以用来从会话变量中检索它的值。这些类型的参数为数据源控件提供了多个有关如何设置它们的参数值的选项。SqlDataSource 示例既然我已经完成了概述,那么我将对使用 SqlDataSource 和 ObjectDataSource 来检索和修改数据进行一下对比。SqlDataSource 控件(它使用 ADO.NET 2.0 DbProviderFactory 对象)具有将它直接链接到 OLE DB 或 ODBC 数据源的属性。当加载包含链接到 SqlDataSource 的数据绑定控件的 ASP.NET 页时,SqlDataSource 直接与基础数据库进行通信。因而,SqlDataSourceData 源控件不与现有的业务对象集成。为了查看 SqlDataSource 是如何操作的,让我们先观察一下 Orders_SDS.aspx 页(参见图 4)。有一个 DropDownList 控件,它绑定到一个从 Northwind 数据库中检索客户列表的 SqlDataSource 源控件。图 4 通过 SqlDataSource 检索客户还有另外一个名为 sdsOrdersDataSource 的 SqlDataSource,它用于检索选定客户的所有订单。 中的代码(摘自 Orders_SDS.aspx ― 它可在下载中得到)显示了两个 SqlDataSource 控件和这个 DropDownList。请注意,sdsOrdersDataSource SqlDataSource 控件使用 DropDownList 的选定值作为其存储过程的参数(prGet_Orders 的参数)。ProviderName 和 ConnectionString 属性的组合告诉 SqlDataSource 控件从哪个数据存储中获得数据。尽管这些属性使 SqlDataSource 成为检索和修改数据的简单解决方案,但遗憾的是,它们在表示层的 ASPX 文件中公开了数据库连接字符串以及 SQL 语句或存储过程。这通常不是一个好主意。将该数据以加密形式存储在配置储存库(如配置文件或注册表)中要安全得多。图 4 显示了编辑模式下的 Orders_SDS.aspx 页。分页由 GridView 自动实现(通过将 GridView AllowPaging 属性设置为 true,并将 PageSize 属性设置为期望的大小,如 10)。这将告诉网格将其中的行分页,并且在“下一页”或“上一页”链接被单击时自动重新加载网格和页。GridView 使用 TextBox 控件显示选定行的可编辑列。数据绑定列是通过 asp:BoundField 或 TemplateField 元素定义的。通过设置 DataField 属性,可以将 BoundField 绑定到 GridView 的关联数据源: &asp:BoundField HeaderText="ShipCity" DataField="ShipCity"
SortExpression="ShipCity"&&/asp:BoundField&
这将告诉 GridView 控件,当它处于查看模式时,应该在 span 元素中显示 ShipCity 值。当 GridView 处于编辑模式时,选定行中的这一列将在适当的 HTML 元素中显示。在这种情况下,HTML 元素为 TextBox,因为它是一个字符串值。该元素是基于绑定列的数据类型选择的。例如,如果该列在 SQL Server 中被定义为位,则将使用 CheckBox 控件在编辑模式下显示该列。TemplateField 元素在绑定列的行为方式方面提供了更大的灵活性。请观察以下摘自 Orders_SDS.aspx 页的代码示例: &asp:TemplateField SortExpression="OrderDate" HeaderText="OrderDate"&
&ItemTemplate&
&asp:Label ID="lblOrderDate_Item" Runat="server"
Text='&%# Bind("OrderDate", "{0:d}") %&'&&/asp:Label&
&/ItemTemplate&
&EditItemTemplate&
&asp:TextBox ID="txtOrderDate_Edit" Runat="server"
Text='&%# Bind("OrderDate", "{0:d}") %&'&&/asp:TextBox&
&/EditItemTemplate&
&/asp:TemplateField&
当 GridView 处于查看模式时,它使用 TemplateColumn 在 Label 控件中显示 OrderDate 列;当 GridView 处于编辑模式时,它使用 TemplateColumn 在 TextBox 控件中显示 OrderDate 列。您还可以使用 FooterTemplate 来告诉 Template 列在页脚中以不同的方式显示该列。还可以使用 HeaderTemplate、AlternatingItemTemplate 甚至 InsertItemTemplate。还请注意 ASP.NET 2.0 中引入的简化的绑定语法。OrderDate 的值是通过调用 Bind 表达式并向它传递 GridView 的关联数据源中列的名称和一个可选的数据格式字符串表达式来设置的。在该示例中,我使用了表示短日期的数据格式字符串。这些属性都可以通过可借助于 Visual Studio 2005 中的新增智能标记功能访问的属性来轻松设置(参见图 6)。 图 6模板列属性ObjectDataSourceGridView 和其他数据绑定控件的最出色的功能之一是,在设置了它们以后,只需更改单个属性,就可以将它们绑定到 ObjectDataSource 控件或 SqlDataSource 控件。例如,您必须完成的所有工作就是创建一个新的 ObjectDataSource 控件,并将 GridView 的 DataSourceID 属性更改为这个新的 ObjectDataSource 控件的 ID。与 SqlDataSource 不同的是,ObjectDataSource 控件使您可以从 ASPX 页和表示层中抽象出特定于数据库的设置,并将它们移至多层体系结构中的较低层(参见图 7)。例如,SqlDataSource 控件的 ConnectionString、ProviderName 和 SelectCommand 属性在 ObjectDataSource 控件中不存在。相反,它们被替换为告诉 ObjectDataSource 控件实例化哪个业务类以及使用哪个方法来检索或修改数据的其他属性。图 7 层要设置 ObjectDataSource 控件以访问另一个层的业务类及其方法,必须首先将 ObjectDataSource 控件的 TypeName 属性设置为该业务类的名称(如 TypeName="MSDN2005Jan_BLL.Orders")。然后,将 SelectMethod 属性设置为该业务类中将用来检索数据源数据的方法的名称。该业务类的方法必须返回一个可枚举的列表,例如,集合、数组、DataSet 或 DataReader。为了让该方案能够工作,ObjectDataSource 必须能够执行指定的方法。如果它是静态方法,则不需要完成任何特殊的工作。如果该方法是实例方法,则 ObjectDataSource 必须能够创建该类的实例。要达到该目的,最简单的方法是将该业务类编写为包含默认的构造函数。另外,还可以处理 ObjectDataSource 的 ObjectCreating 事件,它使您可以用所需的任何构造函数来实例化该对象,然后将该对象实例传递给数据源控件。 中的代码示例(摘自同样包含在下载中的 Orders.aspx)显示了两个 ObjectDataSource 控件(它们替换了上一个示例中使用的两个 SqlDataSouce 控件)。odsOrdersDataSource 使用 MSDN2005Jan_BLL.Orders 类和它的 GetData 方法来检索它的订单列表。在该示例中,Orders 类中的 GetData 方法只是创建名为 OrdersDataSet 的强类型 DataSet 的实例及其相关的名为 OrdersTableAdapter 的适配器。然后,它调用 Fill 方法并返回强类型的 DataSet: public OrdersDataSet GetData(string CustomerID)
OrdersDataSet oDs = new OrdersDataSet();
OrdersTableAdapter oDa = new OrdersTableAdapter();
oDa.Fill(oDs, CustomerID);
return oDs;
请注意,GetData 方法还接受由 ObjectDataSource 控件的 SelectParameter 属性传入的 CustomerID 参数。UpdateData 方法的参数也是从中所示的 UpdateParameters 属性所指示的 ObjectDataSource 传入的。以下为 Orders 类的 UpdateData 方法的签名: public void UpdateData(int OrderID, DateTime OrderDate,
string ShipCity, string ShipCountry)
UpdateData 方法的参数的名称和数据类型必须与 ObjectDataSource 控件中更新参数的名称和数据类型相匹配。数据源控件不能使用批处理更新,因此不能一次性地将多个行传递给更新方法。相反,必须将每个值作为单个参数传递给更新方法。除了 SelectMethod 和 UpdateMethod 属性以外,ObjectDataSource 控件还具有 DeleteMethod 和 InsertMethod 属性。增强的强类型DataSet上一个示例演示了如何将 GridView 绑定到 ObjectDataSource 控件以链接到业务层的类,因此您可以通过该类的方法来检索和更新数据。如果您具有现有的业务层逻辑和多层体系结构,则该示例可以很好地工作。它还可以调用 Web 服务客户端代理的方法,或其他任何遵循类和方法要求的引用类的方法。我故意将上个示例的一个方面延迟到现在才加以讨论,那就是强类型 DataSet。使用 Visual Studio 2005 中的向导,您还可以直接在类型化的 DataSet 类中定义方法,以便选择、插入、更新和删除数据。因而,您可以避免直接在业务层或数据访问层中编写任何 ADO.NET 代码,而是使用向导直接将 ADO.NET 逻辑添加到类型化的 DataSet 中。您不必检索类型化的 DataSet,但是在这种情况下它是有价值的 ― 这要归功于它的一些新的增强功能。类型化的 DataSet 创建了一个默认的 Fill 方法,该方法被追加到类型化 DataSet 的定义中的 TableAdapter 类。可以将这一可选的 TableAdapter 类设置为存储连接字符串以及存储过程或 SQL 语句,以便在数据库中选择、更新、插入和删除记录。图 9 Orders DataSet类型化的 DataSet 还允许您创建自定义的方法,以便检索和修改数据。在 Orders DataSet(如图 9 所示)中,我基于 prGet_Orders 存储过程创建了一个类型化的 DataSet。然后,通过数据组件查询配置向导,我向 OrdersTableAdapter 中添加了两个自定义方法:GetData 和 UpdateData。这些方法是在与类型化 DataSet 的 XSD 相关联的类文件内部定义的;在该示例中,我的文件名为 OrdersDataSet.Designer.cs。如果您想了解详细信息,可以打开这个自动生成的文件(但是您不应当修改它,因为如果该文件被重新生成,则您的更改将被改写)并查看自定义的 GetData 和 Update 方法以及为类型化 DataSet 创建的所有标准代码。如果您运行示例页 Orders2.aspx,则它会直接绑定到上述自定义方法。这可以显著减少您为中间层手动编写的代码数量。其他数据源控件细节现在我们已经完成了讨论,如果您知道数据源控件还可以通过一系列属性来公开缓存功能,则可能会很感兴趣。通过将 EnableCaching 设置为 true 并将 CacheDuration 设置为很多秒,数据将在缓存中存储相应的时间。还可以将 CacheExpirationPolicy 属性设置为 Absolute 或 Sliding。Absolute 是默认值,它告诉缓存在加载后立即开始倒计时直至过期。Sliding 策略告诉缓存在缓存数据每次被访问时重置过期倒计时。在您要加载的数据不是非常容易改变的情况下,缓存技术可以帮助优化应用程序。例如,在加载省、市甚至产品类别的 DropDownList 的数据源控件中使用缓存是有好处的,因为这些数据不会频繁更改。ObjectDataSource 控件包装了挂钩到业务对象以调用业务方法的代码。它还与数据绑定控件(例如,GridView)协同工作,以执行分页、排序以及在 ASP.NET 1.x 中必须手动编码的数据更改。小结ASP.NET 2.0 中的改进(尤其是在数据源和数据绑定控件领域中的改进)显著减少了产生带有完整分页、排序和编辑功能并填充了数据的网格所需的代码数量。尽管数据源控件消除了过去必须手动编写的大量代码,但您仍然可以编写代码以便与数据源控件进行交互。您不仅可以只通过指指点点来创建数据驱动的 Web 页,而且还可以编写代码来使用数据源控件的事件,例如,Selected、Selecting、Updated 或 Updating 事件。请将给 John 的问题和意见发送到 。John Papa 是一个棒球迷,在夏天的大多数夜晚,他都会与自己的两个小女儿、妻子和忠实的小狗 Kadi 一起为 Yankees 队加油。他已经撰写了多部有关 ADO、XML 和 SQL Server 的著作,并且经常在行业会议(例如,VSLive)上发表演讲。体验ASP.NET 2.0 中的数据访问控件
清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐体验ASP.NET 2.0 中的数据访问控件,无聊中的都看过来。
  简介  数据访问一直是开发 Web 应用程序的一个关键问题。几乎每个商业应用程序都需要数据驱动的 Web 页面。由于数据访问如此普遍,开发人员不断地为简单的数据库任务重新生成复杂的代码就显得毫无意义了。开发人员需要从格式各异的不同数据源中快速访问数据。幸运的是,ASP.NET 2.0 中新增的数据访问控件和 ADO.NET 2.0 解决了这一问题。  对于传统的 ASP 和 ASP.NET 1.1 应用程序而言,开发人员不得不创建代码访问和更新数据库,将检索到的数据转换为浏览器识别的 HTML 格式。尽管 Visual Studio .NET 的向导可以帮助完成这个任务,但是要完成诸如分页和排序这样的高级功能,仍需要在后端代码和前端显示之间进行复杂的同步。通常,这样的代码难以维护和同步,特别是在数据库发生更改或需要在页面上显示附加数据的时候。此外,作为数据存储,XML 需要添加大量混有数据访问逻辑的代码。  为了提高开发人员的开发效率和 Web 应用程序的性能,ASP.NET 2.0 通过新增的数据控件中封装的功能,更加灵活地控制数据,从而减少访问和显示数据所需的代码。从传统的数据库到 XML 数据存储,各种各样的数据源都能连接到这些控件。所有数据源都以相似的格式进行处理,大大地降低了开发数据驱动的应用程序的复杂性。ASP.NET 2.0 需要进行广泛的体系结构改进,以便从内部支持这些功能。新增的数据源对象通过业界认可的最佳方法增加了一个非常可靠的基础结构。现在,大多数复杂的应用程序都可以利用 ASP.NET 2.0 提供的数据访问工具。从体系结构和机制上限制 ASP.NET 1.x 执行的绑定和缓存问题,在 ASP.NET 2.0 中都得以解决了。  如果您是一位 ASP 开发人员,那么您会通过这篇白皮书了解到 ASP.NET 2.0 新增的数据访问功能和 ADO.NET 2.0 的数据访问模型。如果您是一位 ASP.NET 1.1 的开发人员,那么这篇白皮书概括的 ADO.NET 新增的改进功能和数据访问模型,以及介绍的如何使用 ASP.NET 2.0 新增的数据访问控件将帮助您减少开发数据驱动 Web 应用程序时编写的代码数量。  Web 应用程序的数据访问  在 .NET Framework 中,通过 ADO.NET API 执行数据访问。API 提供一个抽象层来封装和隐藏直接访问数据库的细节,这些细节有时是很杂乱的。ASP.NET 2.0 Web 应用程序通过提供的一些服务在 ADO.NET 上生成,这些服务用于自动生成与各种类型数据的连接,将用户控件与数据绑定,减少开发数据识别的 Web 应用程序所需的代码数量。  数据访问体系结构  对于 .NET Framework 中的 Web 应用程序,数据访问依赖于两个独立的体系结构层。第一层由执行数据访问所需的框架组件组成。第二层由为程序员提供数据访问功能的 API 和控件组成。从实践的观点看,只需了解能否为特定数据源找到匹配的数据提供程序。  数据访问涉及四个主要的组件:Web 应用程序 (ASP.NET)、数据层 (ADO.NET)、数据提供程序,以及真正的数据源。这些组件之间的关系构成了所有数据识别 Web 应用程序的基础结构。  图 1. 组件体系结构  数据存储  数据存储始于堆栈底部,提供了整个数据访问体系结构的基础。通过 ADO.NET 2.0、ASP.NET 2.0 的新增控件,Web 应用程序能够访问多种数据存储中的数据,包括关系数据库、XML 文件、Web 服务、平面文件,或诸如 Microsoft Excel 这样的电子数据表程序中的数据。实际上,真正的数据源与读取和操作数据所使用的机制关系不大。  数据提供程序  由于具有提供程序模型,ADO.NET 使用一组类和命令与不同的数据源进行交互。提供程序通过定义的一组接口和类挂钩来提供对一个特定数据源的存储和检索功能。这种模型的灵活性使开发人员只需编写一组数据访问代码(使用 ADO.NET)就能够访问多种类型的数据。  在 ASP.NET 2.0 中,除了基本的数据访问之外,提供程序模型实际上还用于多种不同的任务。例如,使用新增的个性化功能存储用户数据时依赖于几类提供程序。因此,实际的提供程序结构是功能依赖的。一个成员提供程序的用途与数据访问提供程序的用途不同。  下表显示组成 ADO.NET 数据提供程序的四个核心对象:表 1. 一个 ADO.NET 数据提供程序的核心对象 对象描述   Connection  建立到指定资源的连接   Command  对一个数据源执行命令。公开 Parameters,在 Connection 的 Transaction 范围内执行。   DataReader  从一个数据源读取只进的只读数据流。   DataAdapter  填充一个 DataSet,解析数据源的更新。  提供程序模型明确地分离了各种使用用途。ASP.NET 开发人员能够集中精力构建功能性的、应用人类工程学的用户界面,而后端开发人员则能够通过现有的企业级数据存储实现复杂的集成。使用 ASP.NET 2.0 的提供程序模型开发 Web 应用程序是一个极好的选择。  ADO.NET API  ADO.NET API 定义的抽象层使所有的数据源看起来都是相同的。不论何种数据源,提取信息的过程都涉及相同的关键类和步骤。我们将在下一部分详细介绍 ADO.NET 的处理过程。  Web 应用程序层  ASP.NET 在栈顶提供一系列控件,这些控件的设计意图是为减少开发的数据访问代码数量。例如,开发人员能使用数据源向导自动创建和配置一个数据源,使用这个数据源发布查询和检索结果。此外,不同的控件能够绑定到一个数据源,因此,控件能够依据从数据源检索到的信息,自动设置控件的外观和内容。  这些控件具有各种形状和大小,包括网格、树、菜单和列表。数据绑定控件通过它的 DataSourceID 属性连接到一个数据源,此属性在设计时或运行时声明。  数据源控件通过提供程序(例如 ADO.NET 中的那些提供程序)绑定到下层的数据存储。使用数据源控件的好处是能够在页面中声明性地表示出来。此外,能够直接使用诸如分页、排序和更新操作等功能,而无需编写一行代码。  数据访问 API  第二个体系结构层提供使用提供程序、ADO.NET 和 ASP.NET 控件的通用机制。这个体系结构涉及一些通用任务和过程。然而,从开发人员的视角来看,使用 ASP.NET 2.0 提供的各种数据绑定控件和数据源控件无需编写代码来支持这些过程。  连接和命令  ADO.NET 包含的 .NET Framework 数据提供程序用于连接一个数据库,执行命令和检索结果。在 ADO.NET 中,使用 Connection 对象连接一个指定的数据源。例如,在 SQL Server 2000 中,能够使用 SQLConnection 对象连接一个数据库,如以下代码所示。  [Visual Basic]Dim nwindConn As SqlConnection = _ New SqlConnection(&Data Source=Integrated Security=SSPI;& _ &Initial Catalog=northwind&)nwindConn.Open()[C#]SqlConnection nwindConn = new SqlConnection(&Data Source= Integrated Security=SSPI;& &Initial Catalog=northwind&);nwindConn.Open();   连接到数据源后,能够使用 Command 对象执行命令和返回结果。Command 对象通过 Command 的构造函数创建,这个构造函数接收一个 SQL 语句或 SQL 查询。一旦创建了 Command,就能使用 CommandText 属性修改 SQL 语句。  Visual Basic] Dim catCMD As SqlCommand = _ New SqlCommand(&SELECT CategoryID, CategoryName FROM Categories&, nwindConn) [C#] SqlCommand catCMD = new SqlCommand(&SELECT CategoryID, CategoryName FROM Categories&, nwindConn);  您可将一条命令认为是等同于一个特定的 SQL 调用,该调用绑定到一个特定的数据库。一条命令只能用于 CommandText 字段中定义的特定调用。  Command 对象提供了一些不同的 Execute 方法来启动存储过程,执行查询或者执行非查询语句,例如更新或插入:  1.
ExecuteReader 方法
将数据作为一个 DataReader 对象返回。用于任何返回数据的 SQL 查询。  2.
ExecuteScalar 方法
返回单独值,例如与特定查询相匹配的记录数,或者数据库功能调用的结果。  3.
ExecuteNonQuery 方法
执行不返回任何行的命令。典型的例子是存储过程、插入和更新。  当然,您需要依据初始化 Command 对象时创建的命令来选择正确的 Execute 方法。  ExecuteReader 方法将任何结果都返回到 DataReader 对象。DataReader 对象是查询数据库返回的一个关联的、只进的只读数据流。执行查询时,第一行返回到 DataReader 中。数据流保持到数据库的连接,然后返回下一条记录。DataReader 从数据库中读取行数据时,每行的列值都被读取和计算,但是不能被编辑。  DataAdapter 和 DataSet  虽然连接数据库的应用程序使用 DataReader 就已足够,但是,DataReader 不能很好地支持数据库访问的断开连接模型。而 DataAdapter 和 DataSet 类则满足了这一需求。  DataSet 是 ADO.NET 断开连接体系结构中主要的数据存储工具。填充 DataSet 时,并非通过 Connection 对象将 DataSet 直接连接到数据库。您必须创建一个 DataAdapter 来填充 DataSet。DataAdapter 连接数据库,执行查询并填充 DataSet。当 DataAdapter 调用 Fill 或 Update 方法时,在后台完成所有的数据传输。每个 .NET Framework 的数据提供程序都有一个 DataAdapter 对象。  一个 DataSet 代表一组完整的数据,包括表格、约束条件和表关系。DataSet 能够存储代码创建的本地数据,也能存储来自多个数据源的数据,并断开到数据库的连接。  DataAdapter 能控制与现有数据源的交互。DataAdapter 也能将对 DataSet 的变更传输回数据源中。下列代码说明使用 DataSet 典型情况。  [Visual Basic]Dim nwindConn As SqlConnection = _ New SqlConnection(&Data Source=& & _ &Integrated_Security=SSPI;Initial Catalog=northwind&)Dim selectCMD As SqlCommand = _ New SqlCommand(&SELECT CustomerID, CompanyName FROM & & _ &Customers&, mandTimeout = 30Dim custDA As SqlDataAdapter= New SqlDataAdaptercustDA.SelectCommand= selectCMDDim custDS As DataSet= New DataSetcustDA.Fill(custDS, &Customers&) nwindConn.Close()[C#]SqlConnection nwindConn = new SqlConnection(&Data Source=& + &IntegratedSecurity=SSPI;Initial Catalog=northwind&);SqlCommand selectCMD = new SqlCommand(&SELECT CustomerID, CompanyName FROM Customers&, nwindConn);mandTimeout = 30;SqlDataAdaptercustDA = new SqlDataAdapter();custDA.SelectCommand= selectCMD;nwindConn.Open();DataSetcustDS = new DataSet();custDA.Fill(custDS, &Customers&);nwindConn.Close();   在以上代码中:  1.
创建了一个 SQLConnection 来连接 SQL Server 数据库。  2.
创建了一个 SQLCommand 来查询 Customers 表格。  3.
创建了一个 DataAdapter 来执行 SQLCommand 和数据操作的连接部分。  4.
从 DataAdapter 可以创建一个 DataSet。DataSet 是数据操作的断开连接部分,并且能绑定到 ASP.NET 2.0 的各种 Web 控件。  一旦创建了 DataSet,就能够将它绑定到任何数据识别的控件,方法是通过控件的 DataSource 属性和 DataBind() 方法。不幸的是,如果数据发生更改,您不得不再次调用 DataBind(),将控件重新绑定到数据集。因此,ASP.NET 1.x 开发人员不得不考虑调用绑定方法的精确时间和位置。开发出正确的同步方法和同步事件是相当困难的。  由于存在数据源的概念,ASP.NET 2.0 极大地简化了创建、绑定 DataSet 以及保持数据同步的全部过程。  ASP.NET 2.0  ASP.NET 2.0 从几个方面极大地改进了基本模型。最突出的一方面是,通过 DataSource 隐藏了创建 SQLCommand、生成 DataAdapter 和填充 DataSet 的过程,或者由数据绑定向导自动配置这个过程。  Configure DataSource Wizard 生成的代码能够连接数据源(数据库、平面文件、XML、对象),创建查询,并允许开发人员以简单的几个步骤指定参数。  一旦创建了数据源,下一步就是将数据源连接到一个控件。这里的连接就是所谓的数据绑定。从数据源提取的值能够连接到控件属性或作为表格、列表或网格中的值使用,这些操作都无需编写任何代码。  ASP.NET 数据控件  ASP.NET 1.1 是为使用 ADO.NET API 和简化数据访问而设计的。ADO.NET 2.0 通过新增的一组控件和向导进一步简化了数据访问过程和编写代码的数量,这些控件和向导是针对数据识别的应用程序,为提高开发速度和简化开发过程而设计的。  DataSource 控件  新的 ASP.NET 2.0 数据访问系统的核心是 DataSource 控件。一个 DataSource 控件代表一个备份数据存储(数据库、对象、xml、消息队列等),能够在 Web 页面上声明性地表示出来。页面并不显示 DataSource,但是它确实可以为任何数据绑定的 UI 控件提供数据访问。为了支持 DataSource 并使用自动数据绑定,利用一个事件模型以便在更改数据时通知控件,各种 UI 控件都进行了重新设计。此外,数据源还提供了包括排序、分页、更新、删除和插入在内的功能,执行这些功能无需任何附加代码。  最终,所有 DataSource 控件公开一个公共接口,因此,数据绑定控件无需了解连接细节(即连接到一个数据库还是一个 XML 文件)。每个 DataSource 还公开了特定于数据源的属性,因而对开发人员而言更为直观。例如,SqlDataSource 公开了 ConnectionString 和 SelectCommand 属性,而 XMLDataSource 则公开了定义源文件和任何架构的属性。在底层,所有数据源都创建特定于提供程序的基础 ADO.NET 对象,该对象是检索数据所需的。  创建一个 DataSource  在ASP.NET 2.0 中,DataSource 的子类是新增的数据控件中功能最强大的。它们提供了到数据库、XML 文件或其他数据源的声明性配置连接。使用控件从数据源检索和更新数据无需添加任何自定义代码。Configure DataSource Wizards 的图形化界面允许程序员定义相应的细节来配置数据源,几个简单的步骤就可以完成。ASP.NET 2.0 自动生成代码来连接资源,如果合适,创建基于参数的查询。自动生成的代码结果存储在一个 .ASPX 文件中。例如,在 .ASPX 文件中存储的 SQLDataSource 代码包含连接字符串的属性和 SQL 语句的属性。  <asp:sqldatasource id=&SqlDataSource1& runat=&server& selectcommand=&select customerid, companyname from customers& providername=&System.Data.OleDb& connectionstring=&Provider=SQLOLEDB.1;Integrated Security=SSPI; Initial Catalog=N Data Source= Auto Translate=T Use Encryption for Data=False></asp:sqldatasource>   当然,开发人员能够根据需要修改这些代码。例如,可以将提供程序名移动到 web.config 文件或其他中心位置。  数据源类型  ASP.NET 2.0 提供了几个独特的数据源对象,用于为数据绑定控件构造一个公共接口框架。数据源的对象用于操作不同的基础结构(从数据库、内存中的对象到 XML 文件),为控件提供抽象数据操作功能。  AccessDataSource  如果在应用程序中使用 Microsoft Access 数据库,则能够通过 System.Web.UI.WebControls.AccessDataSource 执行插入、更新和删除数据的操作。Access 数据库是提供基本关系存储的最小数据库。因为使用起来既简单又方便,所以许多小型的 Web 站点通过 Access 形成数据存储层。虽然 Access 不提供像 SQL Server 这样的关系数据库的所有功能,但是其简单性和易用性使 Access 非常适合应用于原型开发和快速应用程序开发 (RAD)。  SqlDataSource  为了提供一个更加健壮的数据库,综合利用 Microsoft SQL Server 提供的广泛功能,ASP.NET 2.0 提供了 SQLDataSource。SQLDataSource 的配置比 AccessDataSource 的更为复杂,SQLDataSource 用于企业级应用程序,这些应用程序需要一个真正的数据库管理系统 (DBMS) 所拥有的功能。  ObjectDataSource  System.Web.UI.WebControls.ObjectDataSource 用于实现一个数据访问层,从而提供更好的封装和抽象。ObjectDataSource 控件支持绑定到一个特定的数据层,而非绑定到一个数据库,其绑定方式与使用其他控件绑定数据库的方式相同。ObjectDataSource 控件能够绑定到任何一个方法,该方法返回一个 DataSet 对象或 IEnumerable 对象(例如,一个 DataReader 或类集合)。  <asp:objectdatasource id=&ObjectDataSource& runat=&server& typename=&DAL.Customers& selectmethod=&GetOrders&></asp:objectdatasource>   ObjectDataSource 控件使用 Web 服务代理的方式与使用数据访问层的方式完全相同。换句话说,ObjectDataSource 处理设计正确的 Web 服务与处理一个关系数据库的方式相同。  DataSetDataSource  System.Web.UI.WebControls.DataSetDataSource 控件允许使用 XML 列表数据。列表数据以行和列排列。  <?xml version=&1.0&?><collection><book><title>cosmos</title><author>carl sagan</author><publisher>ballantine books</publisher></book><book><title>catwings</title><author>ursula k. le guin</author><publisher>scholastic</publisher></book></collection>   要使用数据,只需设置 DataFile 属性,使其指向 XML 文件。  <asp:datasetdatasource id=&Datasetdatasource1& runat=&server& datafile=&collection.xml& />   数据源能够连接到任何列表控件,例如 DataGrid。  XmlDataSource  XML 数据通常用于表示半结构化或层次化数据。使用 XML 文档作为数据源,可以从其他资源(例如,其他公司或现有应用程序)接收 XML 文档,并将 XML 数据格式化,以便与应用程序兼容。  要配置一个 System.Web.UI.WebControls.XmlDataSource,必须指定 XML 文件的路径,如果 XML 需要传输数据,则还需指定 XSLT 样式表路径或 XPath 查询路径(可选)。  <asp:XmlDataSource ID=&XmlDataSource1& Runat=&server& DataFile=&~/xml/fruits.xml&></asp:XmlDataSource>   XMLDataSource 特别适用于拥有层次结构的控件,例如,树视图或数据列表。  <asp:TreeView ID=&TreeView1& Runat=&server& DataSourceID=&XmlDataSource1& ShowLines=&True&></asp:TreeView>   以上两个列表说明了如何声明性地配置一个 XmlDataSource 和一个 TreeView 控件,使之呈现如图 2 所示的 XML 层次结构。  图 2. TreeView 控件  TreeView 控件自动生成标记来创建一个用户界面,支持用户单击父实体时展开节点。TreeView 控件通过 XMLDataSource 绑定到 fruits.xml 文件。  SiteMapDataSource  System.Web.UI.WebControls.SiteMapDataSource 控件能够在逻辑上(而非物理上)实现 Web 站点的导航。通过生成一个逻辑结构,导航不受文件物理地址变动的影响。即使页面物理位置改变,您也不必更改应用程序的导航结构。  要使用 SiteMapDataSource,第一步是创建一个 XML 文件来映射 SiteMapNode 元素的层次结构,从而指定站点的导航结构。您可以将 XML 文件保存为 app.sitemap。  当您在应用程序中使用 SiteMapDataSource 时,它将查找指定的 app.sitemap 文件。然后,SiteMapDataSource 连接到导航控件,实现逻辑导航。  图 3. Home-> Articles-> Article 2 页面的详细路经跟踪  数据绑定  一旦创建了一个数据源,接下来是将数据源连接到一个控件。这里的连接就是所谓的数据绑定。ASP.NET v1.x 提供了一些数据绑定控件,例如 DataGrid、DataList 和 DropDownList 等。ASP.NET 2.0 对改进数据绑定控件的概念作出了几个重要的创新:  1.
现在,当数据绑定控件绑定到一个数据源控件(通过 DataSourceID 属性)时,能够自动绑定本身。这使页面开发人员无需了解页面的生存周期,并且不必在此时显式调用 DataBind()。数据绑定控件能够自动完成这些工作,甚至能侦听数据源的更改事件。  2.
ASP.NET 2.0 引入了新的数据绑定控件,这些控件能自动使用数据源的功能,例如排序、分页、更新、插入和删除。  在 ASP.NET v1.x 中,页面开发人员需要手动处理数据绑定控件事件,编写代码来执行这些操作。而在 ASP.NET 2.0 中,数据绑定控件直接使用数据源的功能。当然,页面开发人员仍能处理适当的事件以自定义这些操作的处理;例如,验证输入。  ASP.NET 2.0 支持多种不同控件丰富的数据绑定。例如,能够将一个 XML 数据源绑定到 <ASP:DropDownList>、<ASP:DataList>、<ASP: GridView> 以及许多其他的数据控件。  ASP.NET 2.0 中的数据绑定  传统的应用程序需要编写代码来绑定数据。例如,要在传统的 ASP 中填充下拉列表,或对页面中的值进行硬编码(如下所示),或编写代码来连接数据库,检索数据,再填充下拉列表。如果手动填充下拉列表,则每次更新数据时,必须更改代码(手动)。
来源:/n/3086.html
热门搜索:
怎么设置电脑自动关机
在电脑怎么设置隐藏关机功能
电脑提示实时调试的解决方法步骤
PS修复工具使用方法 图老师教你如何去除脸部的瑕疵
现在市面上海藻面膜这么多,我们在买海藻面膜的时候难免会买到假的海藻面膜,那么应该如何辨别海藻面膜真假呢?海藻面膜怎么分真假?下面我们一起来看看具体的分辨方法是什么。
现在很多人在使用海藻面膜,海藻面膜是一种护肤效果很好的面膜,海藻面膜用起来有什么好处?使用海藻面膜的功效与作用是什么?下面我们一起来了解一下,以便于我们更好地使用面膜进行护肤。
很多人都喜欢使用海藻面膜,海藻面膜对护理皮肤有很多功效作用,使用海藻面膜的时候我们要注意哪些事项呢?下面我们来看看海藻面膜使用的注意事项,以便于更安全地护理皮肤。
蒲公英作为一种药食两用的植物经常被大家忽略,其实它不仅可以食用药用还有美容的功效,那么蒲公英可以祛痘吗?蒲公英怎样可以祛痘?蒲公英还有其他什么美容功效吗?通过下面的文章我们一起来看看吧。
现在很多仙剑爱好者疯狂的喜欢上了新出的仙剑奇侠传五,但是很多人都不知道怎么过,甚至一个环节卡的不行了,下面就给各位带来福音,仙剑奇侠传五全剧情解析流程攻略。
阴阳师是一款热门的网络游戏,一上市就获取了大批的粉丝。在游戏中发现别的玩家都已经二十多级了,反观自己才四、五级,心里真不是滋味,那么要怎么升级呢?本文汇集了阴阳师目前获取经验的所有方法,开始疯狂刷级之路吧。
手机是我们日常生活中常用的通讯软件,我们每天都会玩上几个小时的手机,甚至更长,每天入睡前和早上醒来都会玩上一会儿手机,我想这也是大多数人的习惯。可是部分人的手机电池越来越不耐用,其实这是没有掌握手机充电的正确方法。下面就给大家来介绍手机充电的正确方法有哪些吧。
肚子上的赘肉看上去让人烦恼,尤其是对于想穿裙子的女生来说更是一件郁闷的事情。现在减肥的方法有很多,但是很多人并不知道专门瘦肚子的方法。那么,如何瘦肚子呢?下面就给大家介绍几种减肚子的方法吧。
炎夏烈日炎炎,就在你与阳光亲密接触时,也让紫外线有了可乘之机,有的时候,虽然你认真做了防晒的工作,却依旧没能躲过炙热的阳光,晒伤之后,要立马着手修复晒伤的肌肤,那么晒伤后怎么处理呢?下面就一起来看看吧。
脸上肉嘟嘟的女生和男生们是不是选择发型的时候很伤大脑。没关系,我们这里肯定有一款适合你的发型,本文也是大圆脸一枚,下面分享下我收集多年的圆脸女生男生发型以及学会的圆脸发型修饰技巧。

我要回帖

更多关于 打印机打印不完整 的文章

 

随机推荐