Posted on 2006-08-07 17:51
大大毛 阅读(312)
评论(0) 编辑 收藏 所属分类:
ASP.NET
刚刚开始学习ASP.NET,环境:XP,VS2005,SQLServer2000,学习资料:北大青鸟的视频教程
ASP.NET与ASP的区别
asp.net 运行于 .net 框架之上,经过了伪编译,而 asp 则是直接运行在IIS上的,在调用时由DLL进行解释;
asp.net 支持三种开发语言:vb.net,c#,j#,而 asp 仅支持 vbscript 的语法;
asp.net 提供了控件支持,而 asp 则没有;
asp.net 支持OOP,代码也是按类来组织的,asp 只能依靠精巧的代码实现;
asp.net 在页面的处理上采用了VB的事件驱动,大大简化了开发难度,asp 依靠的是手工驱动;
asp.net 提供的VIEWSTATE机制,使得页面元素可以保持原有的值,asp 必须依靠手工代码;
asp.net 使用了代码分离,asp 则没有,现在老板就能看清楚你写的那堆垃圾在哪儿了;
asp.net 的IDE功能上强大许多,不过在HTML元素的设计上成了一只鸡肋,许多地方俺还是习惯手工改写;
ASP.NET提供的控件
提供的常用控件都在VS工具箱的"标准"及"HTML"栏中,所谓标准控件就是指服务器控件,一拖出来就有个 runas="server" 的属性,当然HTML控件也可以加上这个属性变身为服务器控件,一旦拥有这个runas那么该控件就会成为类的一项属性,在类成员中使用this指针就可以直接引用,果然是方便快捷。不过界面元素的动作也相应着发生了变化,如果是普通的HTML元素,那么响应它事件的只能是本地 script 代码,而一旦成为服务器控件,那么所有针对它的事件响应都会在服务器端完成。
常用的事件:
protected void Page_Load(object sender, EventArgs e) {
}
这个事件最为常用,在设计器中双击页面就会切到该事件方法中来。该事件发生在页面每次被装载时,不过这里的Load跟本地App的Load不一样,由于HTTP的特性决定了客户/服务端的联接不可能是持续和双向的。因此客户端浏览器每发一次请求,服务端就会Load页面一次。
这个事件通常配合 Page.IsPostBack 属性使用,该属性在Load完成之后才会被设为 true 值,因此只有第一次的Load,该属性值才为 false,看教程中的示例,需要初始化环境时,需要将初始化代码置入 if(!Page.IsPostBack) 块中。
protected void Page_Init(object sender, EventArgs e) {
}
Page_Init 事件在 Load 事件之前发生,页面在加载时的顺序是 控件Init(),页面Init(),页面Load(),控件Load()
ASP.NET从提交的数据中取值
1 string userName = Request["userName"].ToString();
2 string userName = Request.Form.Get("userName");
3 string userName = Request.QueryString["userName"];
取值的方法与 asp 相同。
第1行方法适用于 Post/Get 两种提交方式;第2行只能用于 Post 提交,这里使用了集合的Get方法;第3行只能用于 Get 提交,这里使用另外一种获取集合成员的方法。
ASP.NET查询MsSQL数据库
需要引用的命名空间(相当于JAVA中的包):System.Data.SqlClient;
步骤:
1.新建一个 SqlConnection 连接对象,并打开;
new SqlConnection("server=服务的地址;database=数据库名;uid=sa;pwd=");
con.Open();
2.新建一个 SqlCommand 命令对象;
new SqlCommand(SQL语句,con);
3.通过调用 SqlCommand 对象的方法获得数据。
例如:
SqlDataReader sdr = cmd.ExecuteReader(); //获得一个只向前的游标
while(sdr.Read()) {
...
}
4.释放资源
使用 using 语句,属于 .net 的专有语法了,在块的结束将由 using 语法调用 IDisposable 接口定义的 Dispose()方法。因此包含在 using 语句内的对象都应该实现 IDisposable 接口。
使用 finally ,这个方法还是比较容易接受一些,try/catch/finally组合除了可以释放资源外还可以捕获异常。
查了一下资料,MS将连接池也傻瓜了一把(只有使用System.Data.SqlClient包时),除非在 SqlConnection 对象的连接字串中显式指定,否则自动配置连接池。因此在 SqlConnection 对象的使用上应该做到随手关闭的好习惯,呵。