![ASP.NET入门教程 7.3.1 数据源控件的基本属性[1],第1张 ASP.NET入门教程 7.3.1 数据源控件的基本属性[1],第1张](/aiimages/ASP.NET%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B+7.3.1+%E6%95%B0%E6%8D%AE%E6%BA%90%E6%8E%A7%E4%BB%B6%E7%9A%84%E5%9F%BA%E6%9C%AC%E5%B1%9E%E6%80%A7%5B1%5D.png)
数据源控件需要很多属性 明显的有ID和runat= server 还必须指定使用哪个服务器上的哪个数据库以及验证所需的登录名和口令 这些信息保存在连接字符串中 接着必须指定从数据库中读取哪些记录和字段 数据源控件还需要一个提供商 它指定怎样和数据库进行交互(SqlDataSource控件的默认提供商即是Microsoft SQL Server的提供商) 在这个示例中VWD将通过向导带领您完成以上设置
本章中您的主要工作集中在Fixtures aspx页面上 该页面列出Wrox United球队的赛程表 在这个 试一试 练习中 将使用VWD的向导添加数据源控件并查看由IDE为您创建的源代码
( )打开本章的Web站点(C:\BegASPNET \Chapters\Begin\Chapter )并在站点的根目录下创建一个名为Fixtures 代码文件的Web表单模板 aspx的页面 创建时该页面使用了带有站点Master页面和独立切换到Design View并在内容面板中输入Futures
( )从工具条的Data区域中将一个SqlDataSource控件拖放到内容面板的中间 可能需要向下滚动工具条窗口才能看到这个新控件 打开智能任务面板并单击Configure Data Source
( )单击该控件右上方的小箭头以打开智能任务面板并单击ConfigureData Source o VWD将d出一个向导 在第一个对话框中单击New Connection
( )在Data Source文本框中将数据源设置为一个Microsoft SQL Server Database文件 对于Database File Name 浏览App_Data文件夹并选择 WroxUnited mdf 记住使用默认的Windows Authentication 如图 一 所示 单击Test Connection按钮以确保文件名的拼写正确无误而且一切准备妥当 单击OK关闭该窗口
( )单击Next 对于这个示例 不要将连接保存在应用程序文件中
ASP NET 入门教程完整版
lishixinzhi/Article/program/net/201311/14726数据源控件是 Microsoft Visual Studio 中引入的一种新型服务器控件 它们是数据绑定体系结构的一个关键部分 能够通过数据绑定控件来提供声明性编程模型和自动数据绑定行为 本文及此系列中的后续几篇文章将介绍实现数据源控件的核心内容 引言 简而言之 数据源控件概括了一个数据存储和可以针对所包含的数据执行的一些 *** 作 DataBound 控件通过其 DataSourceID 属性与一个数据源控件相关联 大多数传统的数据存储要么是表格格式 要么是分层的 数据源控件也相应地分为两类 在此要介绍的是表格格式的数据源控件 数据源控件自身并不能发挥多大作用 所有逻辑都封装在 DataSourceView 派生的类中 至少有一个 DataSourceView 必须实现检索(即 SELECT)一组行的功能 它可以提供修改数据(即 INSERT UPDATE 和 DELETE)的功能(可选) 数据绑定控件可通过各种 Can??? 属性来检查启用功能集 数据源控件本身只是一个或多个唯一命名视图的容器 依据惯例 默认视图可以按其名称进行访问 也可以为空 不同视图之间是否存在关系或者存在怎样的关系可以根据每个数据源控件的实现情况来进行适当的定义 例如 某个数据源控件可能会通过不同的视图对同一个数据提供不同的经筛选的视图 或者可能会在辅助视图中提供一组子行 可使用数据绑定控件的 DataMember 属性来选择某个特殊的视图(如果该数据源控件提供了多个视图) 请注意 Whidbey 中的所有内置数据源控件目前都不提供多个视图 最后再介绍一点内容 数据源控件(及其视图)会实现两组 API 第一组 API 是就四种常用的数据 *** 作而定义的一个抽象界面 以常规方式从任一数据绑定控件中使用 第二组是可选的 它使用其表示的域或数据存储方面的术语来定义 通常被强类型化 且面向应用程序开发人员 示例 在这些文章中 将实现一个 WeatherDataSource 它将针对由 (英文)提供的 REST(英文)XML API 来工作 以便根据邮政编码来检索天气信息 通常会首先实现派生的数据源控件 public class WeatherDataSource : DataSourceControl { public static readonly string CurrentConditionsViewName = CurrentConditions private WeatherDataSourceView _currentConditionsView private WeatherDataSourceView CurrentConditionsView { get { if (_currentConditionsView == null) { _currentConditionsView = new WeatherDataSourceView(this CurrentConditionsViewName) } return _currentConditionsView } } public string ZipCode { get { string s = (string)ViewState[ ZipCode ] return (s != null) ? s : String Empty } set { if (String Compare(value ZipCode StringComparison Ordinal) != ) { ViewState[ ZipCode ] = value CurrentConditionsView RaiseChangedEvent() } } } protected override DataSourceView GetView(string viewName) { if (String IsNullOrEmpty(viewName) || (String Compare(viewName CurrentConditionsViewName StringComparison OrdinalIgnoreCase) == )) { return CurrentConditionsView } throw new ArgumentOutOfRangeException( viewName ) } protected override ICollection GetViewNames() { return new string[] { CurrentConditionsViewName } } public Weather GetWeather() { return CurrentConditionView GetWeather() } } 如您所见 基本的理念是实现 GetView 以返回一个命名视图实例 以及实现 GetViewNames 以返回可用视图集 在此选择从 DataSourceControl 中派生 有一点是不易察觉的 事实上数据绑定控件要查找 IDataSource 界面 而 DataSource 控件通过实现 GetView 和 GetViewNames 来实现该界面 之所以需要界面是为了使数据源控件能够既是表格格式又是分层的(如果可能的话) 在这种情况下从主要模型中派生并将另一个模型作为界面来实现) 其次 还允许在各种方案中转换其他控件 以使数据源的容量加倍 另外还要注意公共 ZipCode 属性和返回强类型化 Weather 对象的 GetWeather 方法 此 API 适合于页面开发人员 页面开发人员无需考虑 DataSourceControl 和 DataSourceView 下一步是实现数据源视图本身 此特定示例仅提供了 SELECT 级功能(这只是最低要求 也是在此方案中唯一有用的功能) private sealed class WeatherDataSourceView : DataSourceView { private WeatherDataSource _owner public WeatherDataSourceView(WeatherDataSource owner string viewName) : base(owner viewName) { _owner = owner } protected override IEnumerable ExecuteSelect( DataSourceSelectArguments arguments) { arguments RaiseUnsupportedCapabilitiesError(this) Weather weatherObject = GetWeather() return new Weather[] { weatherObject } } internal Weather GetWeather() { string zipCode = _owner ZipCode if (zipCode Length == ) { throw new InvalidOperationException() } WeatherService weatherService = new WeatherService(zipCode) return weatherService GetWeather() } internal void RaiseChangedEvent() { OnDataSourceViewChanged(EventArgs Empty) } } 默认情况下 DataSourceView 类从诸如 CanUpdate 等的属性返回 false 而从 Update 和相关方法抛出 NotSupportedException 在此 在 WeatherDataSourceView 中唯一需要做的就是替代抽象的 ExecuteSelect 方法 返回包含 选定 天气数据的 IEnumerable 在实现过程中 使用了帮助程序 WeatherService 类 该类仅使用 WebRequest 对象来查询 (英文) 方法是使用所选的邮政编码(这没什么特别的) 您可能注意到了 ExecuteSelect 被标记为受保护 数据绑定控件实际调用的是在回拨中传递的公共(和密封)Select 方法 Select 的实现会调用 ExecuteSelect 并调用回拨与得到的 IEnumerable 实例 这种模式非常古怪 这其中有一个原因 此系列随后的文章中将会加以说明 请稍候 下面是该用法的示例 Zip Code: <ASP:TextBox runat= server id= zipCodeTextBox /> <asp:Button runat= server onclick= OnLookuPButtonClick Text= 查找 /> <hr /> <asp:FormView runat= server DataSourceID= weatherDS > <ItemTemplate> <asp:Label runat= server Text= <%# Eval( Temperature 当前温度是 { } ) %> /> </ItemTemplate> </asp:FormView> <nk:WeatherDataSource runat= server id= weatherDS ZipCode= /> <script runat= server > private void OnLookupButtonClick(object sender EventArgs e) { weatherDS ZipCode = zipCodeTextBox Text Trim() } </script> 此代码设置了邮政编码来响应用户输入 这会使数据源发出更改通知 从而使绑定的 FormView 控件执行数据绑定并更改显示 现在 数据访问代码就被封装在数据源控件中 此外 通过此模型 (英文)能够发布一个组件 该组件还可以封装特定于其服务的详细信息 但愿它会好用 此外 抽象的数据源界面允许 FormView 仅针对天气数据进行工作 在下一篇文章中 将增强数据源控件的功能 使其能够自动处理用来查询数据的筛选值(即邮政编码)的更改 lishixinzhi/Article/program/net/201311/13179
ASP NET 带有多种类型的数据源控件 这些控件适用于处理不同类型的数据源 这些控件包括
&# SqlDataSource控件允许连接到大多数关系型数据库 控件名称中的Sql表示数据库能够理解SQL语言 这包含了几乎所有以关系格式保存其数据的数据库 注意Sql并不仅仅表示Microso} SQL Server数据库管理系统 SqlDataSource控件使用某个provider(提供商) 这些提供商专用于不同类型的数据库 默认的提供商是MicrosoftSQL Server 另一个提供商是Oracle 两者都是以托管代码(managed code)编写的 是 NET Framework中最具健壮性的提供商 ASP NET 包含了另一个可以和其他所有以OLEDB驱动的数据库通信的提供商(OLEDB是Object Linking and Embeddingfor Databases首字母缩写) 由于OLEDB是一个老标准 它囊括了几乎所有其他的数据库管理系统 包括IBM DB MySQL和SAP 然而 OLEDB连接的提供商不是用托管代码编写的 这意味着它不完全附和 NET技术的所有要求 但仍然可以在 NET中工作 我们可以预期第三方将发布更多数据源控件和提供商 而且可以预期它们都是以恰当的托管代码编写的
如果开始编写更加复杂的任务 您将发现OLEDB数据源控件并不是System Data层次结构的一部分 这些控件实际上位于System Web UI Controls命名空间内 但对于大多数任务 这个问题都不会出现 您只需从工具条中拖放数据控件即可
&# AccessDataSource控件是SqlDataSource控件的一个特例 它包含一个针对MicrosoftAccess进行了优化的提供商
&# XMLDataSource控件允许连接到XML数据源
&# SiteMapDataSource控件是XMLDataSource控件的特殊形式 它针对ASP NET Web应用程序站点地图(如您在第z章所创建的那样)的特殊体系结构进行了优化
&# ObjectData Source控件连接到您自己创建的业务对象(在第 章讨论)
无论是哪一个数据源控件(如果是SqlDataSource 那么无论是哪个提供商) 它们都为ASP NET 页面激活了一组行为 这包括到数据库的一个连接以及激活数据的读写等行为 这些行为对数据绑定控件都是可用的 它们负责显示数据和从用户那里接收输入
如果对旧版的ASP很熟悉 那么ASP NET 数据源控件其实就相当于象的实例 因此 ADO NET提供数据访问的底层技术 在大多数任务中 ADO NET对对ADO NET对象的创建和 *** 作都是由比较高层的数据源控件对象自动地(而且正确和高效地)完成的
简要地说 数据源控件创建了使用数据所需的后台基础结构 然而 它们没有创建任何在Web页面上显示的数据(这个功能请查阅下一节) 准确地说 它们使得数据绑定控件可以完成读取和写入数据等数据行为
lishixinzhi/Article/program/net/201311/14850
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)