+++ ASP.NET缓存中的数据是不稳定的,不会被永久地存储,可能会由于以下原因之一而从缓存中被自动移除:
1) 缓存满了
2) 缓存项已经过期
3) 缓存依赖的项改变了
+++ 除了可以自动移除缓存项外,你可以显示移除缓存项。另外,当你用Insert方法和Add方法向缓存中添加的缓存项已经存在时,那么,原来的缓存项将被自动删除。
+++ 显示移除缓存项
调用Remove方法,将你想要移除的缓存项的键值传给它。下面的代码演示,移除键值为“MyData1”的缓存项:
Cache.Remove("MyData1"); ......
+++ ASP.NET缓存中的数据是不稳定的,不会被永久地存储,可能会由于以下原因之一而从缓存中被自动移除:
1) 缓存满了
2) 缓存项已经过期
3) 缓存依赖的项改变了
+++ 除了可以自动移除缓存项外,你可以显示移除缓存项。另外,当你用Insert方法和Add方法向缓存中添加的缓存项已经存在时,那么,原来的缓存项将被自动删除。
+++ 显示移除缓存项
调用Remove方法,将你想要移除的缓存项的键值传给它。下面的代码演示,移除键值为“MyData1”的缓存项:
Cache.Remove("MyData1"); ......
在ASP.NET下使用缓存技术,我个人觉得有以下几点:
1) 提高应用程序性能的手段在应用程序开发的各个阶段都能体现出来,既有小细节,又有大方向。比如,保证设计一个好的软件逻辑结构;保证使用一个合适的数据结构,是集合、树形结构,还是链表。凡是程序都是由数据结构组成的,一谈到数据结构就一定会涉及到数据的插入、删除、修改和检索、排序这几个基本操作,不同的数据结构对各种操作的性能有很大的差异。上学时,在《数据结构》的书里讲得很清楚,只是当时没什么实践,体会不到罢了;另外,对于类中成员函数的形式参数,是使用值传递,还是引用传递。值传递时,在被调函数中会创建该参数的副本,这肯定会消耗系统内存,而引用传递只是传递一个该数据结构的地址而已……总之,这要求你在实践中慢慢地积累。
2) 而使用应用程序缓存是提高应用程序性能的一个非常重要的手段。既可以节省系统资源,有可以提高对用户的相应时间。所以说,缓存技术很有意义。
3) 在前面的几篇里,你也许已经发现了,缓存无非涉及了四个操作,添加、检索(读取)、删除(移除)和回调。“添加”缓存项后,需要时就“检索(读取)”它,不需要或缓存项过期了就 ......
+++ 事实上,将数据集绑定到.NET控件,就是将数据库的表或表中某个字段读到内存的某个结构里,比如DataTable,然后把这个数据结构绑定到.NET控件。
+++ 如果你以前使用过C++ Builder或是Delphi,那么你一定记得,绑定数据库控件与一般控件是分开的,这两种控件在不同的包中。而现在的.NET控件就非常灵活,它既可以作为一般的控件使用,供用户选择或输入,比如,DropDownList控件、TextBox控件等等,也可以作为绑定数据库的控件。一般情况,只要设置控件相应的属性就行,如,DataSource属性、DataBind()方法等等,你自己可以试一下,所有控件的使用方法基本都是一样的,并且,无论是BS程序,还是CS程序。
+++ 另外,将数据绑定到.NET控件时,这个数据的形式也是相当的灵活,它可以是SqlDataSource控件,ObjectDataSource控件,DataTable数据集,这个DataTable数据集既可以是从数据库中获得的,也可以是自定义的。
+++ 多参考MSDN,里边有现成的代码,仔细体会,多思考。 ......
+++ 页面代码如下:
<asp:Button ID="Button1" runat="server" Text="添加空行" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="保存所有" OnClick="Button2_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="403px">
<Columns>
<asp:TemplateField HeaderText="ID01">
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID01")%>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ID02">
<ItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID02")%>'>
</asp:TextBox>
</ ......
+++ 页面代码如下:
<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1"
AutoGenerateColumns="true" DataKeyNames="EMPNO">
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetEmp" TypeName="OraEmp">
</asp:ObjectDataSource>
+++ 后台代码如下:
// 自定义类:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OracleClient;
using System.ComponentModel;
public class OraEmp
{
public OraEmp()
{ }
[DataObjectMethod(DataObjectMethodType.Select, true)]
public DataTable GetEmp()
{
string connStr = "Data Source=ora9; uid=scot ......
+++ 页面代码如下:
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="username" DataSourceID="SqlDataSource1"
PageSize="3">
<Columns>
<asp:BoundField DataField="username" HeaderText="用户名" SortExpression="username" ReadOnly="true" />
<asp:BoundField DataField="userpwd" HeaderText="密码" SortExpression="userpwd" />
<asp:CommandField ShowEditButton="True"/>
<asp:CommandField ShowDeleteButton="True"/>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="Data Source=ora9;User ID=scott;Password=tiger;Persist Security Info=True"
&nbs ......