回味手写三层-增删改查
先看下全家福吧
切入正题
首先要有一个model,没有对象操作怎么行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ClassModel
{public class ClassModels{private int cId;public int CId{get { return cId; }set { cId = value; }}private string cName;public string CName{get { return cName; }set { cName = value; }}private int cCount;public int CCount{get { return cCount; }set { cCount = value; }}}
}
然后要有一个SqlHelper(不然操作数据库要累死了)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Configuration; 6 using System.Data.SqlClient; 7 using System.Data; 8 9 namespace ClassDal 10 { 11 class SqlHelper 12 { 13 public static string connstr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; 14 public static SqlDataReader ExcuteReader(string sql, params SqlParameter[] pams) 15 { 16 SqlConnection conn = new SqlConnection(connstr); 17 using (SqlCommand cmd=new SqlCommand(sql,conn)) 18 { 19 if (pams!=null) 20 { 21 cmd.Parameters.AddRange(pams); 22 } 23 if (conn.State==System.Data.ConnectionState.Closed) 24 { 25 conn.Open(); 26 } 27 return cmd.ExecuteReader(); 28 } 29 30 } 31 32 public static DataTable ExcuteDataTable(string sql,params SqlParameter[] pams) 33 { 34 using (SqlDataAdapter adapter=new SqlDataAdapter(sql,connstr)) 35 { 36 if (pams!=null) 37 { 38 adapter.SelectCommand.Parameters.AddRange(pams); 39 } 40 DataTable dt = new DataTable(); 41 adapter.Fill(dt); 42 return dt; 43 } 44 } 45 //增删改 46 public static int ExcuteNonQuery(string sql, params SqlParameter[] pams) 47 { 48 using (SqlConnection conn=new SqlConnection(connstr)) 49 { 50 using (SqlCommand cmd=new SqlCommand(sql,conn)) 51 { 52 if (pams!=null) 53 { 54 cmd.Parameters.AddRange(pams); 55 } 56 if (conn.State==ConnectionState.Closed) 57 { 58 conn.Open(); 59 } 60 return cmd.ExecuteNonQuery(); 61 } 62 } 63 } 64 65 public static object ExcuteScalar(string sql, params SqlParameter[] pams) 66 { 67 using (SqlConnection conn=new SqlConnection(connstr)) 68 { 69 using (SqlCommand cmd=new SqlCommand(sql,conn)) 70 { 71 if (pams!=null) 72 { 73 cmd.Parameters.AddRange(pams); 74 } 75 if (conn.State==ConnectionState.Closed) 76 { 77 conn.Open(); 78 } 79 return cmd.ExecuteScalar(); 80 } 81 } 82 } 83 } 84 85 86 }
然后写 数据访问层(DAL):
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data; 6 using System.Data.SqlClient; 7 namespace ClassDal 8 { 9 public class ClassDals 10 { 11 //datetable 获取信息 12 public DataTable GetAll() 13 { 14 string sql = "select *from Classes"; 15 return SqlHelper.ExcuteDataTable(sql); 16 } 17 // datereader 获取信息 18 public SqlDataReader GetAllInfo() 19 { 20 string sql = "select *from Classes"; 21 return SqlHelper.ExcuteReader(sql); 22 } 23 public SqlDataReader GetInfoFromId(ClassModel.ClassModels model) 24 { 25 string sql = "select *from Classes where CID=@id"; 26 return SqlHelper.ExcuteReader(sql, new SqlParameter("@id",model.CId)); 27 } 28 public int DeleteInfo(int id) 29 { 30 string sql = "delete from Classes where CID=@cid"; 31 SqlParameter pam = new SqlParameter("@cid",id); 32 return SqlHelper.ExcuteNonQuery(sql,pam); 33 } 34 //CID, CName, CCount, CImage, CIsDel, CAddTime 35 public int AddInfo(ClassModel.ClassModels model) 36 { 37 38 string sql = "insert into Classes(CName,CCount)values(@CName,@CCount)"; 39 SqlParameter[] pam = new SqlParameter[] { 40 new SqlParameter("@CName",model.CName), 41 new SqlParameter("@CCount",model.CCount) 42 }; 43 return SqlHelper.ExcuteNonQuery(sql,pam); 44 } 45 public int UpdateInfo(ClassModel.ClassModels model) 46 { 47 //update Classes set CName='123',CCount='123' where CID='43' 48 string sql = "update Classes set CName=@name,CCount=@count where CID=@id"; 49 SqlParameter[] pams = new SqlParameter[] { 50 new SqlParameter("@id",model.CId), 51 new SqlParameter("@name",model.CName), 52 new SqlParameter("@count",model.CCount) 53 }; 54 return SqlHelper.ExcuteNonQuery(sql,pams); 55 } 56 57 } 58 }
在写 业务逻辑层(BLL):
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data; 6 using ClassDal; 7 using System.Data.SqlClient; 8 9 namespace ClassBll 10 { 11 public class ClassBll 12 { 13 ClassDals dal = new ClassDals(); 14 public List<ClassModel.ClassModels> GetAll() 15 { 16 DataTable da = dal.GetAll(); 17 List<ClassModel.ClassModels> list = new List<ClassModel.ClassModels>(); 18 if (da.Rows.Count > 0) 19 { 20 ClassModel.ClassModels mode = null; 21 foreach (DataRow row in da.Rows) 22 { 23 mode = new ClassModel.ClassModels(); 24 mode.CId = Convert.ToInt32(row["CID"].ToString()); 25 mode.CCount = Convert.ToInt32(row["CCount"].ToString()); 26 mode.CName = row["CName"].ToString(); 27 list.Add(mode); 28 } 29 return list; 30 } 31 else 32 { 33 return null; 34 } 35 } 36 37 public List<ClassModel.ClassModels> GetAllInfo() 38 { 39 List<ClassModel.ClassModels> list = new List<ClassModel.ClassModels>(); 40 SqlDataReader reader = dal.GetAllInfo(); 41 while (reader.Read()) 42 { 43 if (reader.HasRows) 44 { 45 ClassModel.ClassModels model = new ClassModel.ClassModels(); 46 model.CId = reader.GetInt32(0); 47 model.CName = reader.GetString(1); 48 model.CCount = reader.GetInt32(2); 49 list.Add(model); 50 51 } 52 } 53 return list; 54 } 55 public ClassModel.ClassModels GetInfoFromId(ClassModel.ClassModels model) 56 { 57 58 SqlDataReader reader = dal.GetInfoFromId(model); 59 if (reader.Read()) 60 { 61 if (reader.HasRows) 62 { 63 //ClassModel.ClassModels model = new ClassModel.ClassModels(); 64 model.CId = reader.GetInt32(0); 65 model.CName = reader.GetString(1); 66 model.CCount = reader.GetInt32(2); 67 68 69 } 70 } 71 72 return model; 73 } 74 public int DeleteInfo(int id) 75 { 76 return dal.DeleteInfo(id); 77 } 78 public int AddInfo(ClassModel.ClassModels model) 79 { 80 return dal.AddInfo(model); 81 } 82 public int UpdateInfo(ClassModel.ClassModels model) 83 { 84 return dal.UpdateInfo(model); 85 } 86 87 } 88 }
然后要写一个list页面显示数据,不然怎么增删改呢?(好像是废话!)
前台:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="List.aspx.cs" Inherits="List" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <title>学生成绩管理系统</title> 8 <style type="text/css"> 9 #tbList 10 { 11 border: 1px solid blue; 12 13 } 14 #tbList th, td 15 { 16 border-bottom: 1px solid blue; 17 border-right: 1px solid blue; 18 19 } 20 </style> 21 </head> 22 <body> 23 <form id="form1" method="post" action="AddInfo.aspx"> 24 <div> 25 <table border="1" cellpadding="1" cellspacing="0"> 26 <tr> 27 <th>编号</th><th>班级名称</th><th>人数</th><th colspan="2">操作</th> 28 </tr> 29 <%=GetAllInfo()%> 30 </table> 31 <input type="submit" name="btnAdd" value="添加" /> 32 </div> 33 </form> 34 </body> 35 </html>
后台:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Text; 8 9 public partial class List : System.Web.UI.Page 10 { 11 protected void Page_Load(object sender, EventArgs e) 12 { 13 14 } 15 public string GetAllInfo() 16 { 17 StringBuilder sb = new StringBuilder(); 18 ClassBll.ClassBll bll = new ClassBll.ClassBll(); 19 List<ClassModel.ClassModels> list = bll.GetAllInfo(); 20 foreach (ClassModel.ClassModels model in list) 21 { 22 sb.Append("<tr>"); 23 sb.Append("<td>" + model.CId + "</td>"); 24 sb.Append("<td>" + model.CName + "</td>"); 25 sb.Append("<td>" + model.CCount + "</td>"); 26 sb.Append("<td><a href='Update.aspx?id=" + model.CId + "'>修改</td>"); 27 sb.Append("<td><a href='Delete.ashx?id=" + model.CId + "'>删除</td>"); 28 sb.Append("</tr>"); 29 } 30 return sb.ToString(); 31 } 32 }
然后先写增加 吧!要不然一会辛辛苦苦写的数据 都删完了!
这里完全可以把 增加 写到 list页面的,太懒了,回头改下
前台:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AddInfo.aspx.cs" Inherits="AddInfo" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <title></title> 8 </head> 9 <body> 10 <form id="form1" method="post" action="AddInfo.aspx"> 11 <div> 12 班级名称: <input type="text" name="txtCName" value="" /><br /> 13 班级人数: <input type="text" name="txtCCount" value="" /><br /> 14 <input type="hidden" name="isPostBack" value="2" /> 15 <input type="submit" name="btnAdd" value="保存" /> 16 </div> 17 </form> 18 </body> 19 </html>
后台:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 public partial class AddInfo : System.Web.UI.Page 9 { 10 protected void Page_Load(object sender, EventArgs e) 11 { 12 string name = Request.Form["txtCName"];//txtCCount isPostBack 13 string countstr = Request.Form["txtCCount"]; 14 string ispostBack=Request.Form["isPostBack"]; 15 if (!string.IsNullOrEmpty(ispostBack)) 16 { 17 int count = 0; 18 if (int.TryParse(countstr,out count)) 19 { 20 ClassBll.ClassBll bll = new ClassBll.ClassBll(); 21 ClassModel.ClassModels model = new ClassModel.ClassModels(); 22 model.CName = name; 23 model.CCount = count; 24 if (bll.AddInfo(model)>0) 25 { 26 Response.Write("<script type='text/javascript'>alert('添加成功!');window.location='List.aspx'</script>"); 27 } 28 else 29 { 30 Response.Write("添加失败!"); 31 } 32 33 } 34 } 35 } 36 }
该写删除了 一个一般处理程序搞定!
1 <%@ WebHandler Language="C#" Class="Delete" %> 2 3 using System; 4 using System.Web; 5 6 public class Delete : IHttpHandler { 7 8 public void ProcessRequest (HttpContext context) { 9 context.Response.ContentType = "text/html"; 10 string id=context.Request.QueryString["id"]; 11 if (!string.IsNullOrEmpty(id)) 12 { 13 int sid = 0; 14 if (int.TryParse(id,out sid)) 15 { 16 ClassBll.ClassBll bll = new ClassBll.ClassBll(); 17 18 if (bll.DeleteInfo(sid)>0) 19 { 20 context.Response.Write("<script type='text/javascript'>alert('删除成功!');window.location='List.aspx'</script>"); 21 } 22 else 23 { 24 context.Response.Write("删除失败!"); 25 } 26 } 27 } 28 } 29 30 public bool IsReusable { 31 get { 32 return false; 33 } 34 } 35 36 }
最后就是修改了,这个才是有点意思的
前台:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Update.aspx.cs" Inherits="Update" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 <html xmlns="http://www.w3.org/1999/xhtml"> 5 <head runat="server"> 6 <title></title> 7 </head> 8 <body> 9 <form id="form1" method="post" action="Update.aspx"> 10 <div> 11 班级名称: 12 <%--用方法返回一个字符串--%> 13 <%-- <input type="text" name="txtCName" value="<%=CCNameInfo() %>" /><br />--%> 14 <input type="text" name="txtCName" value="<%=model.CName %>" /><br /> 15 班级人数: 16 <input type="text" name="txtCCount" value="<%=model.CCount %>" /><br /> 17 <input type="hidden" name="isPostBack" value="<%=model.CId %>" /> 18 <input type="submit" name="btnUpdate" value="保存" /> 19 </div> 20 </form> 21 </body> 22 </html>
后台:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 public partial class Update : System.Web.UI.Page 9 { 10 ClassBll.ClassBll bll = new ClassBll.ClassBll(); 11 protected ClassModel.ClassModels model = new ClassModel.ClassModels(); 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 string isPostback = Request.Form["isPostBack"]; 15 //如果是准备提交保存 16 if (!string.IsNullOrEmpty(isPostback)) 17 { 18 int idCount = 0; 19 if (int.TryParse(isPostback,out idCount)) 20 { 21 string cName = Request.Form["txtCName"];// txtCName txtCCount 22 string cCount = Request.Form["txtCCount"]; 23 model.CId = idCount; 24 model.CName = cName; 25 model.CCount =Convert.ToInt32(cCount); 26 if (bll.UpdateInfo(model)>0) 27 { 28 Response.Write("<script type='text/javascript'>alert('保存成功!');window.location='List.aspx'</script>"); 29 } 30 else 31 { 32 Response.Write("修改失败!"); 33 } 34 } 35 } 36 else//如果是第一次访问 37 { 38 string id = Request.QueryString["id"]; 39 40 int idcount = 0; 41 if (int.TryParse(id, out idcount)) 42 { 43 model.CId = idcount; 44 //查寻数据并存到model中 45 model = bll.GetInfoFromId(model); 46 } 47 } 48 49 50 51 } 52 //protected string CId() 53 //{ 54 // return model.CId.ToString(); 55 //} 56 //protected string CCountInfo() 57 //{ 58 // return model.CCount.ToString(); 59 //} 60 //protected string CCNameInfo() 61 //{ 62 // return model.CName; 63 //} 64 }
其实 修改 和 添加完全可以共用一个页面,或者一个div就行了,这里我就分开写了,看着简单点!
对了别忘了配置webconfig 哦!
1 <?xml version="1.0"?> 2 <!-- 3 有关如何配置 ASP.NET 应用程序的详细信息,请访问 4 http://go.microsoft.com/fwlink/?LinkId=169433 5 --> 6 <configuration> 7 <connectionStrings> 8 <add name="sql" connectionString="Data Source=.;Initial Catalog=ProManager;Integrated Security=true;"/> 9 </connectionStrings> 10 <system.web> 11 <compilation debug="true" targetFramework="4.0"/> 12 </system.web> 13 </configuration>
这样就大功搞成了,挺简单的吧!
转载于:https://www.cnblogs.com/zhaozhengyan/archive/2012/04/09/add-select.html
回味手写三层-增删改查相关推荐
- BS(三层)—增删改查——Web窗体(aspx)版本
上一篇我们用一般处理程序写了(ashx)写了一遍增删改查,今天我们将用Web窗体(aspx)写一遍增删改查.我们平时写的时候到底用一般处理程序呢?还是用Web窗体呢? 简单来说web窗体(aspx)是 ...
- 使用EF框架实现MVC的增删改查功能!!!Entity Framework
一.什么是EF? ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.ADO.NET Entity Fram ...
- express+mongodb+vue实现增删改查-全栈之路
vue element mongodb express 效果图 前言 最近一直想学下node,毕竟会node的前端更有市场.但是光看不练,感觉还是少了点什么,就去github上看别人写的项目,收获颇丰 ...
- mysql源生插入数据_php+mysql源生连接数据库和增删改查数据
php+mysql源生连接数据库和增删改查数据 新建一个init.php文件,执行链接数据库.内容如下 header("Content-type: text/html; charset=ut ...
- 带头节点单链表的增删改查
单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...
- mysql查看修改记录_(转)MySql中监视增删改查和查看日志记录
转载地址为:http://blog.51cto.com/hades02/1641652 首先在命令行输入 show global variables like '%general%' ,然后出现下面的 ...
- C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练,来一份增删改查CRUD)
说点什么.. 呃 也有半个月没更新了. 本来这篇的Demo早就写完了,文章也构思好了.迟迟没发布..是因为实在太忙.. 项目要上线..各种 你们懂的.. 正赶上自己十一人生大事..结婚..所以..忙 ...
- JAVAWEB增删改查武林秘籍
增删改查武林秘籍 学之受用无穷,可在30分钟内写完增删改查所有后台代码 1.项目搭建 1:创建一个maven 带骨架webapp的项目 2:创建表:book表(你所要增删改查的表) 并且使用idea ...
- Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。
我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...
- c语言 双向链表增删修查,手写双链表,并实现增删改查
手写双链表,并实现增删改查 public class DoublyLinkedListT { // 一个空的头节点 private final Node head = new Node(null); ...
最新文章
- 穿上就能凉快近5°C,华中大浙大夏日“避暑神器”登Science
- redis优雅的批量删除key
- 索爱麦克风免驱动的语音录入测试
- 读取文件:TypeError: an integer is required (got type str)
- 机器学习实战-SVM算法-27
- Java学习路线详解
- [转]Newtonsoft JSON how to dynamically change the date format?
- P5039 [SHOI2010]最小生成树(网络流)
- CAS 单点登录模块学习
- 隐式反馈的去噪,模型取得巨大提升!
- 9.Shell 编程从入门到精通 --- 进程
- file_operation(文件操作)file(文件)inode(节点)
- 【软考软件评测师】2018年下案例分析历年真题
- pb生成pbtxt时出错
- 小学计算机课flash的教案,信息技术flash教案
- 2015中国十大域名注册商排名
- 数据中心设计方案 实例,数据中心网络设计方案
- 【C++】运算符重载/函数的返回值为解引用
- C++:实现量化基础互换利率basis swap rate helpers测试实例
- spark.reducer.maxReqsInFlight和spark.reducer.maxBlocksInFlightPerAddress
热门文章
- CentOS 7.2 rpm 安装 Mysql 5.7
- jq向php文件传json,jQuery向后台传入json格式数据的方法
- idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder”
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_2 JdbcTemplate的概述和入门
- Python编程学习笔记:列表
- offset,client,scroll的学习记录
- MongoDB数据库的索引操作(转)
- 课程设计第一次实验总结
- Codeforces Round #102 (Div. 1) D Help Shrek and Donkey 2
- day23 python学习 类 人狗大战