NET2005 学习笔记(精要)

  1.  DataReader 对象是查询数据库返回的一个关联的、只进的只读数据流。执行查询时,第一行返回到 DataReader 中。数据流保持到数据库的连接,然后返回下一条记录。 DataReader 从数据库中读取行数据时,每行的列值都被读取和计算,但是不能被编辑。
2. 虽然连接数据库的应用程序使用 DataReader 就已足够,但是, DataReader 不能很好地支持数据库访问的断开连接模型。而 DataAdapterDataSet 类则满足了这一需求。
DataSet 是 ADO.NET 断开连接体系结构中主要的数据存储工具。填充 DataSet 时,并非通过 Connection 对象将 DataSet 直接连接到数据库。您必须创建一个 DataAdapter 来填充 DataSetDataAdapter 连接数据库,执行查询并填充 DataSet
DataAdapter 调用 FillUpdate 方法时,在后台完成所有的数据传输。每个 .NET Framework 的数据提供程序都有一个 DataAdapter 对象。一个 DataSet 代表一组完整的数据,包括表格、约束条件和表关系。 DataSet 能够存储代码创建的本地数据,也能存储来自多个数据源的数据,并断开到数据库的连接。
DataAdapter 能控制与现有数据源的交互。 DataAdapter 也能将对 DataSet 的变更传输回数据源中。
3. 新的 ASP.NET 2.0 数据访问系统的核心是 DataSource 控件。突出的一方面是,通过 DataSource 隐藏了创建 SQLCommand、生成 DataAdapter 和填充 DataSet 的过程,或者由数据绑定向导自动配置这个过程。
 id="SqlDataSource1"
 runat="server"
 selectcommand="select customerid, companyname from customers"
 providername="System.Data.OleDb"
     connectionstring="Provider=SQLOLEDB.1;Integrated Security=SSPI;
     Initial Catalog=Northwind; Data Source=localhost;
     Auto Translate=True; Use Encryption for Data=False>
4. ASP.NET 2.0 提供了几个独特的数据源对象:AccessDataSource、SqlDataSource、ObjectDataSource、DataSetDataSource、XmlDataSource、SiteMapDataSource。
SQLDataSourceObjectDataSource 支持数据层缓存。通过设置数据源对象的一些属性,程序员不用开发任何自定义代码,即可使用缓存 api。数据源对象将自动管理底层存储机制的一致性。
SiteMapDataSource 和 XmlDataSource 组件是分层数据源控件,用于像 TreeView 和 Menu 控件这样的分层组件。其他各种组件用于管理列表数据。
5.  ObjectDataSource:System.Web.UI.WebControls.ObjectDataSource 用于实现一个数据访问层,从而提供更好的封装和抽象。ObjectDataSource 控件支持绑定到一个特定的数据层,而非绑定到一个数据库,其绑定方式与使用其他控件绑定数据库的方式相同。ObjectDataSource 控件能够绑定到任何一个方法,该方法返回一个 DataSet 对象或 IEnumerable 对象(例如,一个 DataReader 或类集合)。
6.  DataSetDataSource:System.Web.UI.WebControls.DataSetDataSource 控件允许使用 XML 列表数据。列表数据以行和列排列。要使用数据,只需设置 DataFile 属性,使其指向 XML 文件。例如对于XML文件:
   
    carl sagan
    ballantine books
    ursula k. le guin
    scholastic
 
创建连接数据源控件:
                       datafile="collection.xml" />
7. XML 数据通常用于表示半结构化或层次化数据。使用 XML 文档作为数据源,可以从其他资源(例如,其他公司或现有应用程序)接收 XML 文档,并将 XML 数据格式化,以便与应用程序兼容。
要配置一个 System.Web.UI.WebControls.XmlDataSource,必须指定 XML 文件的路径,如果 XML 需要传输数据,则还需指定 XSLT 样式表路径或 XPath查询路径(可选)。
    ID="XmlDataSource1"
    Runat="server"
    DataFile="~/xml/fruits.xml">
XMLDataSource 特别适用于拥有层次结构的控件,例如,树视图或数据列表。
    ID="TreeView1"
    Runat="server"
    DataSourceID="XmlDataSource1"
    ShowLines="True">
以上两个列表说明了如何声明性地配置一个 XmlDataSource和一个 TreeView控件,使之呈现如图所示的 XML 层次结构。
 
8.ASP.NET 2.0 对改进数据绑定控件(例如 DataGrid、DataList 和 DropDownList 等)的概念作出了几个重要的创新:
现在,当数据绑定控件绑定到一个数据源控件(通过 DataSourceID 属性)时,能够自动绑定本身。这使页面开发人员无需了解页面的生存周期,并且不必在此时显式调用 DataBind()。数据绑定控件能够自动完成这些工作,甚至能侦听数据源的更改事件。
ASP.NET 2.0 引入了新的数据绑定控件,这些控件能自动使用数据源的功能,例如排序、分页、更新、插入和删除
9. 几个新的控件: GridViewDetailsView 、FormView大大简化了数据库操作的工作量,几乎不需要写代码即可完成大部分功能。
10.新增的 ASP.NET 2.0 数据功能:
1)ASP.NET 2.0 通过实现表格级 SQL 通知来支持数据库缓存依赖关系。更改数据时,一个表格级依赖关系通知页面。下面的代码将产品页面缓存了一小时,但是向数据库表添加了一个依赖关系。
2)虽然默认情况下 SQLDependency 类只支持 Microsoft SQL Server,但是您能够通过 machine.config 和 web.config 文件替代和重新配置类。这个功能允许您创建自定义的 SQLDependency 类,为任何 DataSource(包括 Oracle、Sybase 或其他任何数据库)提供相似的功能。
11.关于ViewState的比较:
在 ASP.NET 1. x 中,两个字符串进入 ViewState 缓冲区中的序列化如下所示:
;l>;>;
ASP.NET 1. x 中使用的 ViewState 序列化格式是元组格式,由三个一组的层次集合和使用大于号和小于号的序列对组成。大于号之前的字母代表存储对象的类型(t=triplet,p=pair,i=integer,l=ArrayList,等)。大于号和小于号内的每个子元素由分号分隔。这是有趣的序列化格式,有点像一个压缩的 XML。但是,如果您关心空间,那么它不是最有效的序列化格式(只是比 XML 稍好一点)。
ASP.NET 2.0 改变了这种序列化格式。在 ASP.NET 2.0 中,相同的两个字符串进入 ViewState 缓冲区的序列化如以下代码行所示:
[][]string1[]string2
在 ASP.NET 2.0 中,不仅通过改变编码缩减代码行大小,同时Microsoft 通过将 ViewState 分割成两个独立不同的类别解决了这一特殊问题: ViewState 和控件状态。控件状态是另一类隐藏的状态,专门为维护控件的核心行为功能而保留,而 ViewState 只包含维护控件内容 (UI) 的状态。
12 GridView DataGrid 控件的高级功能相似,但基础却不同。 GridView 尽可能地保留了 DataGrid 的对象模型,以便轻松地从现有页面进行移植。但是,基于 DataGrid 的代码与新的基于 GridView 的代码不可能 100% 兼容。
DataGrid GridView 控件的另一个主要差异在于自适应用户界面。与 1.x 版本的 DataGrid 不同的是, GridView 也能在移动设备上显示。换句话说,您能够使用相同的用于桌面页面的网格控件在移动设备上生成报告。 2.0 版本的 DataGrid 也能自适应地显示,但是它的 UI 功能没有 GridView 丰富。
13. ASP.NET 类关系图
14.FormView 和 DetailsView 有两方面的功能差异。首先,FormView 控件具有 ItemTemplate、EditItemTemplate 和 InsertItemTemplate 属性,而 DetailsView 一个也没有。其次,FormView 缺少命令行 — 将可用功能进行分组的工具栏。与 GridView 和 DetailsView 控件不同的是,FormView 没有其自己默认的显示布局。同时,它的图形化布局完全是通过模板自定义的。
15.对于 的站点,会话 ID 直接显示在地址栏中!请尝试下列操作:
1. 连接到使用无 Cookie 会话的 Web 站点(例如,MapPoint)并获得一个映射。此时,该地址存储在会话状态中。 
2.抓取 URL(直至页名称)。不要包括查询字符串,但请确保该 URL 包括会话 ID。 
3.将该 URL 保存到文件中,并将该文件复制/发送到另一台计算机。 
4.在第二台计算机上打开该文件,并将该 URL 粘贴到新浏览器实例中。 
5.只要会话超时仍然有效,就会显示同一个映射。
通过无 Cookie 会话,可以比以往任何时候都更加容易地窃取会话 ID。具有一定危险(会话劫持!)
使用无 Cookie 会话还会引起与链接有关的问题。例如,您不能在 ASP.NET 页中具有绝对的、完全限定的链接。如果您这样做,那么源自该超链接的每个请求都将被视为新会话的一部分。无 Cookie 会话要求您总是使用相对 URL,就像在 ASP.NET 回发中一样。仅当您可以将会话 ID 嵌入到 URL 中时,您才可以使用完全限定的 URL。但是,既然会话 ID 是在运行时生成的,那么您如何才能做到这一点呢?
下面的代码中断了该会话:
要使用绝对 URL,可以借助于一个小技巧,即使用 HttpResponse 类上的 ApplyAppPathModifier 方法:
ApplyAppPathModifier方法采用一个表示URL的字符串作为参数,并且返回一个嵌入了会话信息的绝对 URL。例如,当您需要从 HTTP 页重定向到 HTTPS 页时,该技巧尤其有用。最后,请特别注意,每当您在同一个浏览器内部键入指向某个站点的路径时,您都将丢失无 Cookie 会话的状态。还要请您注意的是,对于移动应用程序,如果设备无法处理专门格式化的 URL,则无 Cookie 会话可能会出现问题。
16. IDataRecord。这是所有 DataReader 实现的接口。使用 IDataRecord 使我们的映射过程独立于供应商。
17 .应当注意 ASP.NET 公开了一个鲜为人知的类,可用于编码和哈希任何序列化的对象 . 该类为 LosFormatter ViewState 实现用于创建回程到客户端的编码文本正是同一个类。
private string EncodeText(string text) {
 StringWriter writer = new StringWriter();
 LosFormatter formatter = new LosFormatter();
 formatter.Serialize(writer, text);
 return writer.ToString();
}
18ASP.Net生命周期添加动态控件的正常时间是在初始化阶段,因为它发生在加载视图状态阶段和加载回发数据阶段之前。而,在初始化阶段,视图状态和回发数据都还没还原,因此不建议访问或设置可能存储在视图状态或被回发值修改的控件属性(不管是动态还是静态控件),因为这些值将被生命周期后续阶段的视图状态和回发值所覆盖。当处理动态控件时我使用了以下模式:
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值