以前在学校ASP.NET都是用控件(如gridview),今天第一次接触用一般处理程序(.ashx)实现单表增删改查。
百度云盘下载链接:http://pan.baidu.com/share/link?shareid=388570&uk=3627406265
前期准备:数据表如下:
SqlHelper文件,
1 private static readonly string conStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; 2 public static int ExecuteNonQuery(string sqlText, params SqlParameter[] paras) 3 { 4 using (SqlConnection conn=new SqlConnection(conStr) ) 5 { 6 using (SqlCommand cmd=new SqlCommand(sqlText,conn)) 7 { 8 if (paras!=null) 9 {10 cmd.Parameters.AddRange(paras);11 }12 conn.Open();13 return cmd.ExecuteNonQuery();14 }15 }16 }17 public static object ExecuteScalar(string sqlText, params SqlParameter[] paras)18 {19 using (SqlConnection conn=new SqlConnection(conStr))20 {21 using (SqlCommand cmd=new SqlCommand(sqlText,conn))22 {23 if (paras!=null)24 {25 cmd.Parameters.AddRange(paras);26 }27 conn.Open();28 return cmd.ExecuteScalar();29 }30 }31 }32 public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] paras)33 {34 SqlConnection conn=new SqlConnection(conStr);35 using (SqlCommand cmd=new SqlCommand(sqlText,conn))36 {37 if (paras!=null)38 {39 cmd.Parameters.AddRange(paras);40 41 }42 43 try44 {45 conn.Open();46 return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);47 48 }49 catch (Exception)50 {51 conn.Close();52 conn.Dispose();53 throw;54 }55 } 56 }57 public static DataTable ExecuteDataTable(string sqlText, params SqlParameter[] paras)58 {59 using (SqlDataAdapter da=new SqlDataAdapter(sqlText,conStr))60 {61 if (paras!=null)62 {63 da.SelectCommand.Parameters.AddRange(paras);64 }65 DataTable dt = new DataTable();66 da.Fill(dt);67 return dt;68 }69 }
web.config添加connectionStrings节点
12 3
一、登录:
1、新建登陆页面Login.htm:
1
2、新建一般处理程序ProcessLogin.ashx
要点:右键添加一般处理程序即可
context.Response.ContentType = "text/html";是告诉浏览器,报文体内容解析为htmlstring html = System.IO.File.ReadAllText(context.Request.MapPath("Login.htm"));读取Login.htm内容,存到字符串中
1 //告诉浏览器,报文体内容解析为html 2 context.Response.ContentType = "text/html"; 3 var name=context.Request.Form["userName"]; 4 var pwd=context.Request.Form["pwd"]; 5 string sqlText="select count(*) from T_Student where name=@name and password=@password"; 6 SqlParameter[] paras=new SqlParameter[]{ 7 new SqlParameter("@name",name), 8 new SqlParameter("@password",pwd) 9 };10 //查询用户名密码是否正确11 int i = (int)Helper.SQLHelper.ExecuteScalar(sqlText, paras);12 if (i>0)13 {14 context.Response.Redirect("UserList.ashx");15 }16 else17 {18 //如果错误,则重新输入Login.htm页面,并保存用户名19 string html = System.IO.File.ReadAllText(context.Request.MapPath("Login.htm"));20 html = html.Replace("name='userName'", "name='userName' value='"+name+"'");21 context.Response.Write(html);22 }
二、用户信息列表
1、新建UserList.htm
要点:该页面作为用户信息列表的模版,写好表格表头后,加@DataRow,便于在一般处理程序用替换@DataRow。
1
2、新建UserList.ashx
要点,获取模版UserList.htm字符串,将数据库用户信息读取出来,遍历追加到StringBuilder,并将@DataRow替换。在详情、删除、修改超链接中分别填写好跳转地址
1 context.Response.ContentType = "text/html"; 2 string sqlText = "select * from T_Student"; 3 DataTable dt = Helper.SQLHelper.ExecuteDataTable(sqlText); 4 //读取模版UserList.htm内容 5 string temp = File.ReadAllText(context.Server.MapPath("UserList.htm")); 6 StringBuilder sb = new StringBuilder(); 7 foreach (DataRow item in dt.Rows) 8 { 9 //追加用户信息和操作10 sb.AppendFormat(@"{0}{1}{2}11 12 详情13 删除14 修改15 16 ", item["id"],item["name"],item["password"]); 17 }18 //将@DataRow替换为StringBuilder内容19 temp=temp.Replace("@DataRow",sb.ToString());20 context.Response.Write(temp);
3、登录成功后,用post方式,将报文提交到UserList.ashx,返回相应报文。效果如下。
三、查看用户详情。
1、添加ShowUserInfo.htm模版
要点:因为编号不需显示,但需要用编号查询用户信息。所以把id放到隐藏域中。<input type="hidden" name="id" />
1 2
用户名: | @userName |
密码: | @password |
2、ShowUserInfo.ashx
1 context.Response.ContentType = "text/html"; 2 //获取Get传递过来的id 3 int id = context.Request.QueryString["id"] == null ? 0 : int.Parse(context.Request.QueryString["id"]); 4 if (id>0) 5 { 6 string sqlText = "select name,password from dbo.T_Student where id=@id"; 7 //从数据库根据id获取用户信息 8 DataTable dt = Helper.SQLHelper.ExecuteDataTable(sqlText,new SqlParameter("@id",id)); 9 //获取ShowUserInfo.htm页面内容10 string temp = File.ReadAllText(context.Server.MapPath("ShowUserInfo.htm"));11 //替换ShowUserInfo.htm页面内容12 temp = temp.Replace("@userName",dt.Rows[0]["name"].ToString());13 temp = temp.Replace("@password", dt.Rows[0]["password"].ToString());14 context.Response.Write(temp);15 }
3、在UserList.ashx点击详情,效果如下
四、删除用户。
1、点击删除前,提示用户(在UserList.html中用Jquery实现)
1 2
2、DeleteUser.ashx
1 context.Response.ContentType = "text/html"; 2 //获取Get传递过来的id 3 int id = context.Request.QueryString["id"] == null ? 0 : int.Parse(context.Request.QueryString["id"]); 4 if (id>0) 5 { 6 string sqltext = "delete from T_Student where id=@id"; 7 //根据id删除用户 8 int i=Helper.SQLHelper.ExecuteNonQuery(sqltext, new SqlParameter("@id",id)); 9 if (i>0)10 {11 //删除成功则跳转到用户信息列表页12 context.Response.Redirect("UserList.ashx");13 }14 else15 {16 context.Response.Write("删除失败");17 }18 }
五、修改用户信息:
1、EditUser.htm
1
2、EditUser.ashx显示要修改的用户信息。
1 context.Response.ContentType = "text/html"; 2 int id = context.Request.QueryString["id"] == null ? 0 : int.Parse(context.Request.QueryString["id"]); 3 if (id>0) 4 { 5 string sqlText = "select name,password from T_Student where id=@id"; 6 DataTable dt = Helper.SQLHelper.ExecuteDataTable(sqlText, new SqlParameter("@id", id)); 7 string temp=File.ReadAllText(context.Server.MapPath("EditUser.htm")); 8 temp=temp.Replace("@id",id.ToString()); 9 temp=temp.Replace("@name",dt.Rows[0]["name"].ToString());10 temp=temp.Replace("@pwd",dt.Rows[0]["password"].ToString());11 context.Response.Write(temp);12 }
3、ProcessEdit.ashx处理修改
1 context.Response.ContentType = "text/html"; 2 int id = context.Request.Form["id"] == null ? 0 : int.Parse(context.Request.Form["id"]); 3 if (id>0) 4 { 5 string name = context.Request.Form["userName"]; 6 string password = context.Request.Form["password"]; 7 string sqltext = "update T_Student set name=@name,password=@password where id=@id"; 8 SqlParameter[] paras = new SqlParameter[]{ 9 new SqlParameter("@id",id),10 new SqlParameter("@name",name),11 new SqlParameter("@password",password)12 };13 int i = Helper.SQLHelper.ExecuteNonQuery(sqltext,paras);14 if (i>0)15 {16 context.Response.Redirect("UserList.ashx");17 }18 else19 {20 context.Response.Write("修改失败");21 }22 }