代码改变世界

asp.net学习笔记

2008-11-16 22:16  yearN  阅读(410)  评论(1编辑  收藏  举报

1. HttpHandlers 和 HttpModules通过扩展原始的页面框架,提供了用于处理请求和响应的两种途径。HttpHandler的主要目的是处理对某种特定文件或者在URL中对某个文件路径的请求,而HttpModule则主要用于在最开始的阶段处理一个请求以及在最后阶段处理一个响应。
HttpHandlers是指实现了IHttpHandler接口的类。它们在ProcessRequest()方法中获得对当前HttpContext对象的引用,并能依靠HttpContext对象的属性来执行代码。
HttpModles通过添加事件处理器到应用程序的事件,从而代码可以同应用程序进行交互。这此类都必须实现IHttpModule接口。
2. 在web.config中设置SqlCacheDependency
<configuration>
<connectionStrings>
<add name=”MyDatabase” connectionString=”Data Source=localhost;Integrated Security=true;Initial Catalog=”MyDataBase”/>
</connectionStrings>
<sytem.web>
<cache>
<sqlCacheDependency enabled=”true” pollTime=”60”>
<add name=”MyDep” connectionName=”MyDatabase” pollTime=”60”/>
</sqlCacheDependency>
</cache>
</system.web>

3. 在页面中操作文件
Using System;
Using System.IO;
Using System.Text;
Using System.Web;

Public partial class FileFun-apsx
{
Public void Page_Load(object sender,EventArgs e)
{
//新建一个FileStream
FileStream fs=new FileStream(@”C:\test.txt”);
//创建一个二进制数组写入流
byte[] byte=Encoding.ASCII.GetBytes(“This is my string!”);
fs.Write(bytes,0,bytes.Length);
//移动第11个位置
fs.Seek(11,SeekOrigin.Begin);
//在这里定一段新的文字
Bytes=Encoding.ASCII.GetBytes(“special code!”);
fs.Write(bytes,0,bytes.Length);
//定位到同样的位置,但是仅重写”special”;
fs.Seek(11,SeekOrign.Begin);
//执行重写
Bytes=Encoding.ASCII.GetBytes(“waycool”);
fs.Write(bytes,0,bytes.Length);
//现在把流读回我们的二进制数组
fs.Seek(0,SeekOrigin.Begin);
byte[] readBytes=new byte[fs.Length];
fs.Read(readBytes,0,Convert.ToInt32(fs.Length));
//转换二进制数组到字符串并Trace输出。
//
Trace.Warn(Encoding.ASCII.getString(readBytes));
fs.Close();
//使用Append模式打开一个新的FileStream
fs=new FileStream(@“c:\test.txt”,FileMode.Append);
bytes=Encoding.ASCII.GetBytes(“This was appended.”);
fs.Write(bytes,0,bytes.Length);
fs.Close();
//使用read-only方式打开一个FileSteam
Fs=new FileStream(@”c:\test.txt”,FlieMode.Open,fileAccess.Read);
readBytes=new byte[fs.Length];
fs.Read(readBytes,0,Convert.ToInt32(fs.Length));

Trace.Warn(Encoding.ASCII.GetString(readBytes));
fs.Close();
}
}

4. XML 中有 5 个预定义的实体引用:

&lt;

小于

&gt;

大于

&amp;

&amp;

和号

&apos;

'

省略号

&quot;

&quot;

引号

注释:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
5. 数据绑定Eval方法和Bind方法:“<% # %>”
Eval:用于单向数据绑定,数据是只读显示。
Bind:Bind则是双向的数据绑定,不但能读取数据,更具有Insert、Update、Delete功能,所以若您需要编辑更新、添加与删除功能必须使用本方法。
6. Data Soruce 控件参数类型


参数类型

说明

ControlParameter

使用ASP.NET服务器控件属性作为参数,例如使用TextBox.Text属性、DropDownList的SelectedItem等

CookieParameter

使用Cookie作为参数

FormParameter

使用HTML窗体字段的值作为参数

ProfileParameter

使用目前用户设置文件(Profile)的属性值作为参数

QueryStringParameter

使用QueryStringFiled字段的名称作为参数

SessionParameter

使用Session作为参数

7.导出数据到Excel
/// <param name="g">要下载的GridView</param>
/// <param name="fileName">文件名;</param>
/// <param name="table">数据源;</param>
public static void DownLoad(GridView g,string fileName,DataTable table)
{
g.DataSource = table;
g.DataBind();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename="+fileName+".xls");
//Response.AddHeader("content-disposition", "attachment;filename=FileName.doc");//即可导成word;
HttpContext.Current.Response.Charset = "gb2312";
HttpContext.Current.Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
g.RenderControl(htmlWrite);
HttpContext.Current.Response.Write(stringWrite.ToString());
HttpContext.Current.Response.End();
}

8.读取Web.Config中<appSettings>区块连接字符串设置值。
Using System.Web.Configuration;
Public partial class ReadAppSettings:System.Web.UI.Page
{
Protected void Page_Load(object sender,EventArge e)
{
String txtCompany=WebConfigurationManager.AppSettings[“Company”];
Response.Write(“公司名:”+txtCompany+”<br>”);
String txtTel=WebConfigurationManager=WebConfigurationManager.AppSettings[“TEL”];
Response.Write(“客服专线:”+WebConfigurationManger.AppSettings[“TEL”]+”<br>”);
}
}

Using System.Web.Configuration;
Public partial class ReadAppSettings:System.Web.UI.Page
{
Protected void Page_Load(object sender,EventArge e)
{
//取得Application路径
String appPath=this.Request.ApplicationPath;
//打开路径所在的Web.Config设置
Configuration config=WebConfigurationManger.OpenWebConfiguration(appPath);
//取得AppSettings区块
AppSettingsSection appSettings=config.AppSettings;
//取出AppSettings区块中所有的Key与Value值
Foreach(string key in WebConfigurationManger.AppSettings)
{
Response.Write(“string.Format(“<b>{0}</b>:{1}<br>”,key,appSettings.Settings[key].Value));
}
}
}

9.对<appSettings>区块进行加密的程序:
Using System.Web.Configuration;
Public partial class EcrytionAppSettings:System.Web.Page
{
Configuration myConfiguration=null;
ConfigurationSection myAppSettings=null;
//以DPAPIProectedConfigurationProvider加密
Protected void btnDPAPI_Click(object sender,EventArgs e)
{
getAppSettings(out myConfiguration,out myAppSettings);
if(!myAppSettings.SectionInformation.IsProtected)
{
//DPAPI加密
myAppSettings.SectionInformation.ProtectSection(“DataProectionConfigurationProvider”);
myyConfiguration.Save();//存储设置写入Web.config文件
}
}
//以RSAProtectedConfigurationProvider加密
Protected void btnRSA_Click(object sender,EventArgs e)
{
getAppSettings(out MyConfiguration,out myAppSettings);
if(!myAppSettings.SectionInformation.IsProtected)
{
myAppSettings.SectionInformation.ProtectSection[“RSAProtectedConfigurationProvider”];
myConfiguration.Save();//存储设置写入web.config文件。
}
}
Protected void getAppSettings(out Configuration myConfig,out Configuration appSettings)
{
myConfig=WebConfigurationManger.OpenwebConfigration(Request.ApplicationPath);
appSettings=myConfig.GetSection[“appSettings”];
}
//解密
Protected void btnDecrypt_Click(object sender,EventArgs e)
{
getAppSettings(out myConfiguration,out myAppSettings);
if(myAppSettings.SectionInformation.IsProcteted)
{
myAppSettings.SectionInformation.UnprotectSection();//解密
myConfiguration.Save();
}
}
}

9.:ArrayList默认的初始容量是16个元素,而List<T>的默认初始容量为4个元素。这意味着当添加第17个元素时,List<T>不得不改变尺寸(重新分配内存)3次,而ArrayList只重新分配一次。这一点在评估应用程序性能时需要被考虑。

10.where关键字用来约束一个类型参数只能接收满足给定约束的实参。例如,DisposableList约束所有类型实参T必须实现IDisposable接口:
public class DisposableList<T> : IList<T>
 where T : IDisposable
这意味着下面的代码将成功编译:
DisposableList<StreamReader> dl = new DisposableList<StreamReader>();
但下面的代码不行:
DisposableList<string> dl = new DisposableList<string>();
这是因为string类型没有实现IDisposable接口,而StreamReader类型实现了。
11.简单地使用default关键字把变量初始化为它的默认值:
Int Data=default(int);
default关键字允许您告诉编译器在编译期将会使用这个变量的默认值。如果类型实参提供了一个数字值(如int,long,decimal),那么默认值为0。如果类型实参提供的是引用类型,那么默认值为null。如果类型实参提供了一个结构体,那么结构体的默认值会把它的每个成员进行初始化:数字类型为0,引用类型为null。
12.泛型IEnumerable的定义为
          *public interface IEnumerable<T> : IEnumerable        
* 也就是说,在实现泛型版IEnumerable的同时还必须同时实现        
  * 非泛型版的IEnumerable接口
IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
13.判断存储过程:
If Exists(select * from dbo.sysobjects where id=object_id(‘dbo.MyTables’) and objectproperty(id,’IsProcedure’)=1)
Drop procedure dbo.MyTables
14.什么是反射?
程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例
15.何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?
呵呵,这个比较有意思,相比LoadFile,LoadFrom则显得不地道,因为它娶媳妇的时候,是让人家穿上嫁妆,坐上马车,还得带着人家的妹妹来,:)用它加载的是程序集,这就要求同时将此程序集所依赖的程序集加载进来。而LoadFile就地道的多,它是加载程序集文件的内容,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用LoadFrom是不能同时加载进来的,而LoadFile却可以。由于LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。
16.Assembly.Load("foo.dll"); 这句话是否正确?
错误,正确的应该是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll");
17.DateTime是否可以为null?
不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null
18.Finalize()和Dispose()之间的区别?
Finalize()用于隐式释放资源,Dispose()用于显示释放资源 (Finalize()的确相当于C++中的析构函数
18.ASP.NET在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?
Xp : aspnet_Wp.exe
Windows 2000 : aspnet_Wp.exe (多谢 Tristan提示更正)
Windows 2003 : w3wp.exe