说明(2017-10-6 11:21:58):
1. 十一放假在家也没写几行代码,本来还想着利用假期把asp.net看完,结果天天喝酒睡觉,回去的票也没买到,惨。。
2. 断断续续的把用户信息的页面写完了,用了三层的方法,之前一直也没记下来,忘了的时候,每次都是从视频里找,这次好歹也要写下来,方便以后抄。
3. 希望十月份能把asp.net学完,然后看传说中的MVC。
代码:
1. 结构图


2. 建立三个类库,一个空web应用程序。DAL引Model,BLL引DAL和Model,WebApp引Model和BLL,反正各种引用。

3. Model里建一个UserInfo类,里面是用户字段和属性。
UserInfo.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace JJW.Model
7 {
8 public class UserInfo
9 {
10 public int ID { get; set; }
11 public string UserName { get; set; }
12 public string PassWord { get; set; }
13 }
14 }4. DAL里有两个类,一个SqlHelper类,里面有两个方法GetTable和ExecuteNonQuery,GetTable负责查询,ExecuteNonQuery负责增删改。另一个UserInfoDal类,里面调用SqlHelper类,细化了增删改查的方法。三层里最重要的就是这个DAL层了。
SqlHelper.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Configuration;
6 using System.Data;
7 using System.Data.SqlClient;
8
9 namespace JJW.DAL
10 {
11 public static class SqlHelper
12 {
13 private static readonly string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
14 public static DataTable GetTable(string sql, CommandType type, params SqlParameter[] ps)
15 {
16 using (SqlConnection con = new SqlConnection(conStr))
17 {
18 using (SqlDataAdapter sda = new SqlDataAdapter(sql, con))
19 {
20 DataTable dt = new DataTable();
21 sda.SelectCommand.CommandType = type;
22 if (ps != null)
23 {
24 sda.SelectCommand.Parameters.AddRange(ps);
25 }
26 sda.Fill(dt);
27 return dt;
28 }
29 }
30 }
31
32 public static int ExecuteNonQuery(string sql, CommandType type, params SqlParameter[] ps)
33 {
34 using (SqlConnection con = new SqlConnection(conStr))
35 {
36 using (SqlCommand cmd = new SqlCommand(sql, con))
37 {
38 cmd.CommandType = type;
39 if (ps != null)
40 {
41 cmd.Parameters.AddRange(ps);
42 }
43 con.Open();
44 return cmd.ExecuteNonQuery();
45 }
46 }
47 }
48 }
49 }UserInfoDal.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using JJW.Model;
6 using System.Data;
7 using System.Data.SqlClient;
8
9 namespace JJW.DAL
10 {
11 public class UserInfoDal
12 {
13 /// <summary>
14 /// 返回列表
15 /// </summary>
16 /// <returns></returns>
17 public List<UserInfo> GetEntity()
18 {
19 string sql = "SELECT * FROM userInfo";
20 DataTable dt = SqlHelper.GetTable(sql, CommandType.Text);
21 List<UserInfo> list = new List<UserInfo>();
22 if (dt.Rows.Count > 0)
23 {
24 foreach (DataRow dr in dt.Rows)
25 {
26 UserInfo userInfo = new UserInfo();
27 LoadEntity(userInfo, dr);
28 list.Add(userInfo);
29 }
30 }
31 return list;
32 }
33 /// <summary>
34 /// 将表转为属性
35 /// </summary>
36 /// <param name="userInfo"></param>
37 /// <param name="dr"></param>
38 private void LoadEntity(UserInfo userInfo, DataRow dr)
39 {
40 userInfo.ID = Convert.ToInt32(dr["id"]);
41 userInfo.UserName = dr["userName"] != DBNull.Value ? dr["userName"].ToString() : string.Empty;
42 userInfo.PassWord = dr["passWord"] != DBNull.Value ? dr["passWord"].ToString() : string.Empty;
43 }
44 /// <summary>
45 /// 删除
46 /// </summary>
47 /// <param name="id"></param>
48 /// <returns></returns>
49 public int DeleteEntity(int id)
50 {
51 string sql = "DELETE FROM userInfo WHERE id = @id";
52 return SqlHelper.ExecuteNonQuery(sql, CommandType.Text, new SqlParameter("@id", id));
53 }
54 /// <summary>
55 /// 插入
56 /// </summary>
57 /// <param name="userName"></param>
58 /// <param name="passWord"></param>
59 /// <returns></returns>
60 public int InsertEntity(UserInfo userInfo)
61 {
62 string sql = "INSERT INTO userInfo(userName,passWord) VALUES(@userName,@passWord)";
63 return SqlHelper.ExecuteNonQuery(sql, CommandType.Text, new SqlParameter[]{
64 new SqlParameter("@userName",userInfo.UserName),new SqlParameter("@passWord",userInfo.PassWord)
65 });
66 }
67 /// <summary>
68 /// 修改
69 /// </summary>
70 /// <param name="userName"></param>
71 /// <param name="passWord"></param>
72 /// <param name="id"></param>
73 /// <returns></returns>
74 public int UpdateEntity(UserInfo userInfo)
75 {
76 string sql = "UPDATE userInfo SET userName=@userName, passWord=@passWord WHERE id=@id";
77 SqlParameter[] ps = {new SqlParameter("@userName",SqlDbType.NVarChar,32),new SqlParameter("@passWord",SqlDbType.NVarChar,32),new SqlParameter("@id",,4) };
78 return SqlHelper.ExecuteNonQuery(sql, CommandType.Text, new SqlParameter[]{
79 new SqlParameter("@userName",userInfo.UserName),new SqlParameter("@passWord",userInfo.PassWord),new SqlParameter("@id",userInfo.ID)
80 });
81 }
82 /// <summary>
83 /// 详细
84 /// </summary>
85 /// <param name="id"></param>
86 /// <returns></returns>
87 public UserInfo ShowDetail(int id)
88 {
89 string sql = "SELECT * FROM userInfo WHERE id = @id";
90 DataTable dt = SqlHelper.GetTable(sql, CommandType.Text, new SqlParameter("@id", id));
91 UserInfo userInfo = new UserInfo();
92 if (dt.Rows.Count > 0)
93 {
94 LoadEntity(userInfo, dt.Rows[0]);
95 }
96 return userInfo;
97 }
98 }
99 }5. BLL层,里面就是把DAL层里的每个方法返回一个值,感觉BLL层没什么用,可能就是DAL层和UI层之间的一个桥梁吧,避免DAL层直接暴露在UI层里。BLL层里只有一个方法UserInfoBll。
UserInfoBll.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using JJW.Model;
6
7 namespace JJW.BLL
8 {
9 public class UserInfoBll
10 {
11 DAL.UserInfoDal UserInfoDal = new DAL.UserInfoDal();
12 public List<UserInfo> GetEntity()
13 {
14 return UserInfoDal.GetEntity();
15 }
16 public int DeleteEntity(int id)
17 {
18 return UserInfoDal.DeleteEntity(id);
19 }
20 public int InsertEntity(UserInfo userInfo)
21 {
22 return UserInfoDal.InsertEntity(userInfo);
23 }
24 public int UpdateEntity(UserInfo userInfo)
25 {
26 return UserInfoDal.UpdateEntity(userInfo);
27 }
28 public UserInfo ShowDetail(int id)
29 {
30 return UserInfoDal.ShowDetail(id);
31 }
32 }
33 }6. 最后的UI层,也就是WebApp。里面就是增删改查的页面,目前用的都是ashx一般处理程序,后面可能会改成aspx。
首先是web.config设置,这里面有两套登录设置,一个是本地,一个是用户名。
1 <?xml version="1.0" encoding="utf-8"?>
2
3 <!--
4 有关如何配置 ASP.NET 应用程序的详细消息,请访问
5 http://go.microsoft.com/fwlink/?LinkId=169433
6 -->
7
8 <configuration>
9 <system.web>
10 <compilation debug="true" targetFramework="4.0" />
11 </system.web>
12 <connectionStrings>
13 <!--<add connectionString="data source=.;initial catalog=jjwdb;integrated security=true;" name="conStr"/>-->
14 <add connectionString="server=.;uid=sa;pwd=123;database=jjwdb;" name="conStr"/>
15 </connectionStrings>
16 </configuration>后面是一堆页面,虽然网上粘很繁琐,但为了以后抄的方便,没办法啊。。而且为了不漏下,按字母顺序粘了。
Add.ashx
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using JJW.Model;
6
7 namespace JJW.WebApp
8 {
9 /// <summary>
10 /// Add 的摘要说明
11 /// </summary>
12 public class Add : IHttpHandler
13 {
14
15 public void ProcessRequest(HttpContext context)
16 {
17 context.Response.ContentType = "text/html";
18 UserInfo userInfo = new UserInfo();
19 userInfo.UserName = context.Request["userName"];
20 userInfo.PassWord = context.Request["passWord"];
21 BLL.UserInfoBll UserInfoBll = new BLL.UserInfoBll();
22 UserInfoBll.InsertEntity(userInfo);
23 context.Response.Redirect("UserInfoList.ashx");
24 }
25
26 public bool IsReusable
27 {
28 get
29 {
30 return false;
31 }
32 }
33 }
34 }Add.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <title></title>
5 </head>
6 <body>
7 <form action="Add.ashx" method="post">
8 <table border="1">
9 <tr>
10 <td>用户名</td>
11 <td><input type="text" name="userName"/></td>
12 </tr>
13 <tr>
14 <td>密码</td>
15 <td><input type="text" name="passWord"/></td>
16 </tr>
17 <tr>
18 <td colspan="2"><input type="submit" value="提交"/></td>
19 </tr>
20 </table>
21 </form>
22 </body>
23 </html>DeleteUser.ashx
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5
6 namespace JJW.WebApp
7 {
8 /// <summary>
9 /// DeleteUser 的摘要说明
10 /// </summary>
11 public class DeleteUser : IHttpHandler
12 {
13
14 public void ProcessRequest(HttpContext context)
15 {
16 context.Response.ContentType = "text/html";
17 int id = Convert.ToInt32(context.Request["id"]);
18 BLL.UserInfoBll UserInfoBll = new BLL.UserInfoBll();
19 UserInfoBll.DeleteEntity(id);
20 context.Response.Redirect("UserInfoList.ashx");
21
22 }
23
24 public bool IsReusable
25 {
26 get
27 {
28 return false;
29 }
30 }
31 }
32 }ShowDetail.ashx
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.IO;
6 using JJW.Model;
7
8 namespace JJW.WebApp
9 {
10 /// <summary>
11 /// ShowDetail 的摘要说明
12 /// </summary>
13 public class ShowDetail : IHttpHandler
14 {
15
16 public void ProcessRequest(HttpContext context)
17 {
18 context.Response.ContentType = "text/html";
19 string filePath = context.Request.MapPath("ShowDetail.html");
20 string fileContent = File.ReadAllText(filePath);
21 int id = Convert.ToInt32(context.Request["id"]);
22 BLL.UserInfoBll UserInfoBll = new BLL.UserInfoBll();
23 UserInfo userInfo = UserInfoBll.ShowDetail(id);
24 fileContent = fileContent.Replace("$id", userInfo.ID.ToString()).Replace("$userName", userInfo.UserName).Replace("$passWord", userInfo.PassWord);
25 context.Response.Write(fileContent);
26
27
28 }
29
30 public bool IsReusable
31 {
32 get
33 {
34 return false;
35 }
36 }
37 }
38 }ShowDetail.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <title></title>
5 </head>
6 <body>
7 <table border="1">
8 <tr>
9 <td>ID</td>
10 <td>$id</td>
11 </tr>
12 <tr>
13 <td>用户名</td>
14 <td>$userName</td>
15 </tr>
16 <tr>
17 <td>密码</td>
18 <td>$passWord</td>
19 </tr>
20 </table>
21 </body>
22 </html>Update.ashx
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using JJW.Model;
6 using System.IO;
7
8 namespace JJW.WebApp
9 {
10 /// <summary>
11 /// Update 的摘要说明
12 /// </summary>
13 public class Update : IHttpHandler
14 {
15 public void ProcessRequest(HttpContext context)
16 {
17 context.Response.ContentType = "text/html";
18 int id;
19 if (int.TryParse((context.Request["id"]), out id))
20 {
21 BLL.UserInfoBll UserInfoBll = new BLL.UserInfoBll();
22 UserInfo userInfo = UserInfoBll.ShowDetail(id);
23 //userInfo.UserName = context.Request["userName"];
24 //userInfo.PassWord = context.Request["passWord"];
25 //UserInfoBll.UpdateEntity(userInfo);
26
27 string filePath = context.Request.MapPath("Update.html");
28 string fileContent = File.ReadAllText(filePath);
29 fileContent = fileContent.Replace("$userName", userInfo.UserName).Replace("$passWord", userInfo.PassWord).Replace("$id",userInfo.ID.ToString());
30 context.Response.Write(fileContent);
31 //context.Response.Redirect("UserInfoList.ashx");
32 }
33
34 }
35
36 public bool IsReusable
37 {
38 get
39 {
40 return false;
41 }
42 }
43 }
44 }Update.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <title></title>
5 </head>
6 <body>
7 <form action="Update2.ashx" method="post">
8 <input type="hidden" name="id" value="$id" />
9 <table>
10 <tr>
11 <td>
12 用户名
13 </td>
14 <td>
15 <input type="text" name="userName" value="$userName" />
16 </td>
17 </tr>
18 <tr>
19 <td>
20 密码
21 </td>
22 <td>
23 <input type="text" name="passWord" value="$passWord" />
24 </td>
25 </tr>
26 <tr>
27 <td colspan="2">
28 <input type="submit" value="提交" />
29 </td>
30 </tr>
31 </table>
32 </form>
33 </body>
34 </html>Update2.ashx
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using JJW.Model;
6
7 namespace JJW.WebApp
8 {
9 /// <summary>
10 /// Update2 的摘要说明
11 /// </summary>
12 public class Update2 : IHttpHandler
13 {
14
15 public void ProcessRequest(HttpContext context)
16 {
17 context.Response.ContentType = "text/html";
18 UserInfo userInfo = new UserInfo();
19 userInfo.ID = Convert.ToInt32(context.Request["id"]);
20 userInfo.UserName = context.Request["userName"].ToString();
21 userInfo.PassWord = context.Request["passWord"].ToString();
22 BLL.UserInfoBll UserInfoBll = new BLL.UserInfoBll();
23 UserInfoBll.UpdateEntity(userInfo);
24 context.Response.Redirect("UserInfoList.ashx");
25 }
26
27 public bool IsReusable
28 {
29 get
30 {
31 return false;
32 }
33 }
34 }
35 }UserInfoList.ashx
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.IO;
6 using JJW.Model;
7 using System.Text;
8
9 namespace JJW.WebApp
10 {
11 /// <summary>
12 /// UserInfoList 的摘要说明
13 /// </summary>
14 public class UserInfoList : IHttpHandler
15 {
16
17 public void ProcessRequest(HttpContext context)
18 {
19 context.Response.ContentType = "text/html";
20 string filePath = context.Request.MapPath("UserInfoList.html");
21 string fileContent = File.ReadAllText(filePath);
22 BLL.UserInfoBll UserInfoBll = new BLL.UserInfoBll();
23 List<UserInfo> list = UserInfoBll.GetEntity();
24 StringBuilder sb = new StringBuilder();
25 foreach (UserInfo userInfo in list)
26 {
27 sb.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td><a href='Update.ashx?id={0}'>修改</a></td><td><a href='DeleteUser.ashx?id={0}'>删除</a></td><td><a href='ShowDetail.ashx?id={0}'>详细</a></td></tr>", userInfo.ID, userInfo.UserName, userInfo.PassWord);
28 }
29 fileContent = fileContent.Replace("$tbody", sb.ToString());
30 context.Response.Write(fileContent);
31 }
32
33 public bool IsReusable
34 {
35 get
36 {
37 return false;
38 }
39 }
40 }
41 }UserInfoLIst.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <title></title>
5 </head>
6 <body>
7 <h1>用户表</h1>
8 <a href ="Add.html">添加用户</a>
9 <table border="1">
10 <tr>
11 <th>
12 ID
13 </th>
14 <th>
15 用户名
16 </th>
17 <th>
18 密码
19 </th>
20 <th>
21 修改
22 </th>
23 <th>
24 删除
25 </th>
26 <th>
27 详细
28 </th>
29 </tr>
30 $tbody
31 </table>
32 </body>
33 </html>运行结果:

总结:
至今没有一天之内完整的写一遍,其实需要每天都练习的,里面有很多细节,特别是DAL层里的数据库操作,再次许愿,十月份能把asp.net部分学习完!嘻嘻(#^.^#)
















