博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net初学习实现简单的增删改查功能
阅读量:6867 次
发布时间:2019-06-26

本文共 10836 字,大约阅读时间需要 36 分钟。

    在学习中发现网页模板可以大大节约重复的页面代码,同时对于WebSite开发的程序在不同的页面直接调用已写好的代码既不方面,只是作为代码量不大的程序进行开发还是比较方便。

    get和post的区别get是通过url传递表单值,post通过url看不到表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用get,比如上传文章、传递密码或者<textarea>发表大段文章,post则没有这个限制;post会有浏览器提示重新提交表单的问题。也就是说get和post都是以不同的方式提交表单的信息,只是方式不一样,post是以头报文的形式传递,我们可以使用火狐的免费插件firebug或者免费的httpwatch(破解版的当然免费),看到这些。

    简单的说浏览器和服务器直接就是请求和回应,内部的具体细节可以看看博客园中的很多示例图,当然我们可以分析一下,就是浏览器通过DNS解析后向服务器发送请求,服务端侦听到客户端(浏览器)请求,开始分配相应套接字并建立连接,之后就是一方发送一方接收回应的过程,这里面存在一个长连接短连接的概念,具体还是查资料,这里就不多说了。

    现在我们先来分析一下已经生成好的web程序,我们来反编译看下具体的执行过程。

我们只看其中关键的部分,也是我们一般程序中的主体部分,使用reflector

1 [CompilerGlobalScope] 2 public class default_aspx : _Default, IHttpHandler 3 { 4     // Fields 5     private static object __fileDependencies; 6     private static bool __initialized; 7  8     // Methods 9     [DebuggerNonUserCode]10     public default_aspx();11     [DebuggerNonUserCode]12     private HtmlHead __BuildControl__control2();13     [DebuggerNonUserCode]14     private HtmlTitle __BuildControl__control3();15     [DebuggerNonUserCode]16     private HtmlForm __BuildControlform1();17     [DebuggerNonUserCode]18     private void __BuildControlTree(default_aspx __ctrl);19     [DebuggerNonUserCode]20     protected override void FrameworkInitialize();21     [DebuggerNonUserCode]22     public override int GetTypeHashCode();23     [DebuggerNonUserCode]24     public override void ProcessRequest(HttpContext context);25 }26 27  28 Expand Methods29

它对应的源代码如下:

1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 2  3  4  5  6  7     测试 8  9 10     
11
12 13
14
15 16

现在我们再来看关键的部分:

 

1 [DebuggerNonUserCode] 2 private void __BuildControlTree(default_aspx __ctrl) 3 { 4     this.InitializeCulture(); 5     IParserAccessor accessor = __ctrl; 6     accessor.AddParsedSubObject(new LiteralControl("\r\n\r\n\r\n\r\n\r\n")); 7     HtmlHead head = this.__BuildControl__control2(); 8     accessor.AddParsedSubObject(head); 9     accessor.AddParsedSubObject(new LiteralControl("\r\n\r\n    "));10     HtmlForm form = this.__BuildControlform1();11     accessor.AddParsedSubObject(form);12     accessor.AddParsedSubObject(new LiteralControl("\r\n\r\n\r\n"));13 }

从上面可以看出,.NET运行时将html创建成一个树对象,而后已以创建节点对象模型

 

1 [DebuggerNonUserCode]2 private HtmlTitle __BuildControl__control3()3 {4     HtmlTitle title = new HtmlTitle();5     IParserAccessor accessor = title;6     accessor.AddParsedSubObject(new LiteralControl("测试"));7     return title;8 }

这里我只是让大家能看到 <title>测试</title>的效果,具体的可以自己看看。

下面就写个小代码试下手感受下asp.net web开发,基本原理都差不多只是对于刚从Winform转过来的同学感觉上很繁琐,节约时间不多说了,直接上代码,代码简单就是为了自己熟悉测试的

 

1 <%@ WebHandler Language="C#" Class="List" %> 2  3 using System; 4 using System.Web; 5 using System.Data; 6 using System.Data.SqlClient; 7  8 public class List : IHttpHandler { 9     10     public void ProcessRequest (HttpContext context) {11         context.Response.ContentType = "text/html";12         DataTable dt = SqlHelper.ExecuteDataTble();13         System.Text.StringBuilder sb = new System.Text.StringBuilder();14         foreach (DataRow dr in dt.Rows)15         {16             sb.AppendLine(" ");17             sb.AppendLine("" + dr["s_no"] + "");18             sb.AppendLine("" + dr["s_name"] + "");19             sb.AppendLine("" + dr["s_sex"] + "");20             sb.AppendLine("" + dr["s_birthday"] + "");21             sb.AppendLine("" + dr["s_avgrade"] + "");22             sb.AppendLine("" + dr["s_dept"] + "");23             sb.AppendLine("删除");24             sb.AppendLine("选择");25             sb.AppendLine("修改");26             sb.AppendLine("");27         }28         string content = System.IO.File.ReadAllText(context.Server.MapPath("model.htm"));29         content = content.Replace("@replace", sb.ToString()).Replace("@title", "学生信息表");30         context.Response.Write(content);31     }32  33     public bool IsReusable {34         get {35             return false;36         }37     }38 39 }40 public class SqlHelper41 {42     public static System.Data.DataTable ExecuteDataTble()43     {44         using (SqlConnection con = new SqlConnection("Data Source=ROHELM-PC;Initial Catalog=T-SQL练手;Integrated Security=True"))45         {46             using (SqlCommand cmd = con.CreateCommand())47             {48                 cmd.CommandText = "select * from student";49                 DataTable dt = new DataTable();50                 SqlDataAdapter da = new SqlDataAdapter(cmd);51                 da.Fill(dt);52                 return dt;53             }54         }55     }56 }

下面这个其实保存的形式是什么无关紧要的,只要是文本形式就行。

model
1  2  3  4      5     15 16 17     
18
19
20
21
22 @title
23
24
25 @replace26
27
32
35
36
37
28
29
30
31
33 添加记录 34
38
39
40 41

删除部分

del
1 <%@ WebHandler Language="C#" Class="del" %> 2  3 using System; 4 using System.Web; 5 using System.Data.SqlClient; 6 using System.IO; 7 public class del : IHttpHandler { 8     public void ProcessRequest (HttpContext context) { 9         string tooglePage = File.ReadAllText(context.Server.MapPath("jumpPage.htm"));10         context.Response.ContentType = "text/html";11         //通过url传参数12         string id = context.Request.QueryString["id"];13         string ids = context.Request.Form["ckdel"];14         if (!string.IsNullOrEmpty(id))15         {16             SQLhelper.ExecuteNonQuery2("delete from student where s_no=@id",17                 new SqlParameter("@id", id)18                 );19             tooglePage = tooglePage.Replace("@targetPage", "List.ashx");20             context.Response.Write(tooglePage);21         }22         else if (!string.IsNullOrEmpty(ids))23         {24             SQLhelper.ExecuteNonQuery2("delete from student where s_no in (" + ids + ")");25             tooglePage = tooglePage.Replace("@targetPage", "List.ashx");26             context.Response.Write(tooglePage);27         }28         else29         {30        31             context.Response.Write("删除不成功!");32         }33     }34  35     public bool IsReusable {36         get {37             return false;38         }39     }40 41 }42 public partial class SQLhelper43 {44     public static void ExecuteNonQuery2(string sql, params SqlParameter[] paramseter)45     {46         using (SqlConnection con = new SqlConnection("Data Source=ROHELM-PC;Initial Catalog=T-SQL练手;Integrated Security=True"))47         {48             con.Open();49             {50                 using (SqlCommand cmd = con.CreateCommand())51                 {52                     cmd.CommandText = sql;53                     cmd.Parameters.AddRange(paramseter);54                     cmd.ExecuteNonQuery();55                 }56             }57         }58     }59 }

添加部分

add
1 <%@ WebHandler Language="C#" Class="ADD"%> 2  3 using System; 4 using System.Web; 5 using System.Data.SqlClient; 6  7 public class ADD : IHttpHandler { 8      9     public void ProcessRequest (HttpContext context) {10         context.Response.ContentType = "text/html";11         string s_name=context.Request.Form["Name"];12         string s_no = context.Request.Form["num"];13                 SQLhelper.ExecuteNonQuery("insert into student(s_no,s_name)values(@number,@name)",14                        new SqlParameter("number", s_no),15                        new SqlParameter("name", s_name)16                       );17             context.Response.Redirect("List.ashx");18     }19  20     public bool IsReusable {21         get {22             return false;23         }24     }25 26 }27  public partial class SQLhelper28 {29      public static void ExecuteNonQuery(string sql, params SqlParameter[] paramseter)30      {31          using (SqlConnection con = new SqlConnection("Data Source=ROHELM-PC;Initial Catalog=T-SQL练手;Integrated Security=True"))32          {33              con.Open();34              {35                  using (SqlCommand cmd = con.CreateCommand())36                  {37                      cmd.CommandText = sql;38                      cmd.Parameters.AddRange(paramseter);39                      cmd.ExecuteNonQuery();40                  }41              }42          }43      }44 }

使用数据库脚本:

SQL
1 USE [T-SQL练手] 2 GO 3 /****** Object:  Table [dbo].[student]    Script Date: 05/10/2012 00:05:40 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 SET ANSI_PADDING ON 9 GO10 CREATE TABLE [dbo].[student](11     [s_no] [int] NOT NULL,12     [s_name] [nvarchar](50) NOT NULL,13     [s_sex] [char](2) NULL,14     [s_birthday] [smalldatetime] NULL,15     [s_speciality] [varchar](50) NULL,16     [s_avgrade] [numeric](3, 1) NULL,17     [s_dept] [varchar](50) NULL,18  CONSTRAINT [PK__student__2F36BC5B7F60ED59] PRIMARY KEY CLUSTERED 19 (20     [s_no] ASC21 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]22 ) ON [PRIMARY]23 GO24 SET ANSI_PADDING OFF25 GO26 /****** Object:  Default [DF__student__s_speci__03317E3D]    Script Date: 05/10/2012 00:05:40 ******/27 ALTER TABLE [dbo].[student] ADD  CONSTRAINT [DF__student__s_speci__03317E3D]  DEFAULT ('计算机软件与理论') FOR [s_speciality]28 GO29 /****** Object:  Default [DF__student__s_dept__0519C6AF]    Script Date: 05/10/2012 00:05:40 ******/30 ALTER TABLE [dbo].[student] ADD  CONSTRAINT [DF__student__s_dept__0519C6AF]  DEFAULT ('计算机科学系') FOR [s_dept]31 GO32 /****** Object:  Check [CK__student__s_avgra__0425A276]    Script Date: 05/10/2012 00:05:40 ******/33 ALTER TABLE [dbo].[student]  WITH CHECK ADD  CONSTRAINT [CK__student__s_avgra__0425A276] CHECK  (([s_avgrade]>=(0) AND [s_avgrade]<=(100)))34 GO35 ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK__student__s_avgra__0425A276]36 GO37 /****** Object:  Check [CK__student__s_birth__023D5A04]    Script Date: 05/10/2012 00:05:40 ******/38 ALTER TABLE [dbo].[student]  WITH CHECK ADD  CONSTRAINT [CK__student__s_birth__023D5A04] CHECK  (([s_birthday]>='1970-1-1' AND [s_birthday]<='2000-1-1'))39 GO40 ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK__student__s_birth__023D5A04]41 GO42 /****** Object:  Check [CK__student__s_sex__014935CB]    Script Date: 05/10/2012 00:05:40 ******/43 ALTER TABLE [dbo].[student]  WITH CHECK ADD  CONSTRAINT [CK__student__s_sex__014935CB] CHECK  (([s_sex]='男' OR [s_sex]='女'))44 GO45 ALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK__student__s_sex__014935CB]46 GO

运行效果:

 其他操作显示区域没有调整好,且受到上传图片的限制未演示。

转载于:https://www.cnblogs.com/rohelm/archive/2012/05/09/2493552.html

你可能感兴趣的文章
51Nod-1011 最大公约数GCD【欧几里得算法】
查看>>
#从零开始学Swift2.0# No.2 运算符和表达式
查看>>
Ubuntu下安装NetBeans步骤和相关问题的解决方法
查看>>
iOS开发UI中懒加载的使用方法
查看>>
online_judge_1107
查看>>
Ubuntu下修改为永久DNS的方法
查看>>
微软铁杆粉丝的狂想曲
查看>>
13DBUtils工具类
查看>>
Java并发包--ThreadPoolExecutor
查看>>
实习3月的总结
查看>>
Android开发之动态设置字体的样式和粗细
查看>>
Linux系统下 为命令配置别名
查看>>
每天一个小算法(Shell Sort3)
查看>>
如何去掉给图片添加链接后的蓝色边框
查看>>
在线用户的简单的统计和显示(只是一种很局限的在线用户统计显示,先留着,以后再研究复杂的)...
查看>>
Centos下MongoDB数据库的安装以及配置开机自启动(三)
查看>>
关于window.showModalDialog 父子窗口传值,及刷新父窗等问题
查看>>
linux内核驱动module_init解析(1)
查看>>
linux常用命令&以及帮助命令
查看>>
apachebench的简单使用
查看>>