博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初识三层架构
阅读量:7070 次
发布时间:2019-06-28

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

             复杂项目不能把SQL语句直接写到程序里,不模块化、难以维护,应该采用三层架构。Web开发中的三层架构也是同样的结构。 模型层Model;数据访问层DAL(Data Access Layer);业务逻辑层BLL(business logic layer )。实体类就是Model;对数据进行操作的代码写在DAL中,一般就是SQL语句,DAL只有对数据的操作;BLL调用DAL中的代码进行逻辑操作SQL语句一般只应该出现在DAL中。 三层:UI(界面,User Interface)、BLL、DAL。Model是在三层之间进行数据传递的。UI层调用BLL、BLL调用DAL,数据用Model传递,UI不能直接调用DAL。

SQLHelper
using System; using System.Collections.Generic; using System.Text; using System.Configuration; using System.Data; using System.Data.SqlClient; namespace 三层架构.DAL {
class SQLHelper {
public static readonly string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString; /// /// 执行非查询语句 /// /// SQL语句 /// 传入变量 ///
影响行数
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) {
using (SqlConnection con = new SqlConnection(conStr)) {
con.Open(); using (SqlCommand cmd = con.CreateCommand()) {
cmd.CommandText = sql; if (parameters != null) {
foreach (SqlParameter param in parameters) {
cmd.Parameters.Add(param); } } return cmd.ExecuteNonQuery(); } } } /// /// 执行非查询语句 /// /// SQL语句 /// 传入变量 ///
返回查询结果中的第一行第一列的值
public static object ExecuteScalar(string sql, params SqlParameter[] parameters) {
using (SqlConnection con = new SqlConnection(conStr)) {
con.Open(); using (SqlCommand cmd = con.CreateCommand()) {
cmd.CommandText = sql; if (parameters != null) {
foreach (SqlParameter param in parameters) {
cmd.Parameters.Add(param); } } return cmd.ExecuteScalar(); } } } public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) {
using (SqlConnection con = new SqlConnection(conStr)) {
con.Open(); using (SqlCommand cmd = con.CreateCommand()) {
cmd.CommandText = sql; if (parameters != null) {
foreach (SqlParameter param in parameters) {
cmd.Parameters.Add(param); } } DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(dt); return dt; } } } } }
DAL
1 using System;  2 using 三层架构.Model;  3 using System.Data.SqlClient;  4 using System.Data;  5 using System.Collections.Generic;  6  7 namespace 三层架构.DAL  8 {
9 class PersonDAL 10 {
11 //增加字段 12 public static int AddNew(Person model)//返回新添加字段的主键 13 {
14 object obj= SQLHelper.ExecuteScalar("insert into T_person(Age,Name) output inserted.id values(@Age,@Name)",new SqlParameter("Age",model.Age),new SqlParameter("Name",model.Name)); 15 return Convert.ToInt32(obj); 16 } 17 //删除操作 18 public static int Delete(int id) 19 {
20 return SQLHelper.ExecuteNonQuery("delete from T_person where id=@id", new SqlParameter("id", id)); 21 } 22 //更新数据 23 public static int UpDate(Person model) 24 {
25 return SQLHelper.ExecuteNonQuery("update T_Person set age=@age,name=@name where id=@id",new SqlParameter("age",model.Age), new SqlParameter("name",model.Name),new SqlParameter("id",model.Id)); 26 } 27 //查询数据 28 public static Person GetPerson(int id) 29 {
30 DataTable dt=SQLHelper.ExecuteDataTable("select * from T_Person where id=@id",new SqlParameter("id",id)); 31 if (dt.Rows.Count <= 0) 32 {
33 return null; 34 } 35 else if (dt.Rows.Count ==1) 36 {
37 DataRow row =dt.Rows[0]; 38 Person person = new Person(); 39 person.Id = (int)row["Id"]; 40 person.Name = (string)row["Name"]; 41 person.Age =Convert.ToInt32( row["Age"]); 42 return person; 43 } 44 else 45 { 46 throw new Exception("未知数据错误!"); 47 } 48 } 49 public static IEnumerable
GetAllPerson() 50 {
51 DataTable dt = SQLHelper.ExecuteDataTable("select * from T_Person"); 52 List
list = new List
(); 53 foreach (DataRow row in dt.Rows) 54 {
55 Person person = new Person(); 56 person.Id = (int)row["Id"]; 57 person.Name = (string)row["Name"]; 58 person.Age = Convert.ToInt32(row["Age"]); 59 list.Add(person); 60 } 61 return list; 62 } 63 } 64 }
BLL
1 using 三层架构.Model;  2 using 三层架构.DAL;  3 using System;  4 using System.Collections;  5 using System.Collections.Generic;  6  7 namespace 三层架构.BLL  8 {
9 class PersonBLL 10 {
11 //增加字段 12 public static int AddNew(Person model)//返回新添加字段的主键 13 {
14 return PersonDAL.AddNew(model); 15 } 16 //删除操作 17 public static int Delete(int id) 18 {
19 return PersonDAL.Delete(id); 20 } 21 //更新数据 22 public static int UpDate(Person model) 23 {
24 if (model.Age < 0) 25 {
26 throw new Exception("年龄不能为负数!"); 27 } 28 return PersonDAL.UpDate(model); 29 } 30 //查询一条数据 31 public static Person GetPerson(int id) 32 {
33 return PersonDAL.GetPerson(id); 34 } 35 //查询所有数据 36 public static IEnumerable
GetAllPerson() 37 {
38 return PersonDAL.GetAllPerson(); 39 } 40 } 41 }
Model
1 namespace 三层架构.Model 2 {
3 class Person 4 {
5 public int Id { get; set; } 6 public int Age { get; set;} 7 public string Name { get; set; } 8 } 9 }

转载于:https://www.cnblogs.com/rohelm/archive/2012/03/26/2418757.html

你可能感兴趣的文章
MYSQL数据库
查看>>
linux环境搭建seafile客户端自动上传文件
查看>>
10.27 函数
查看>>
MySQL查询缓存
查看>>
【问题总结】问题行
查看>>
这种放法会使div像一张纸一样
查看>>
阿里云环境配置
查看>>
Codeforces 455C
查看>>
PHP请求页面
查看>>
【动态规划】旅行
查看>>
Git小白入门
查看>>
基于 HTML5 的 WebGL 和 VR 技术的 3D 机房数据中心可视化
查看>>
PHP,JAVA,NET 开发比较
查看>>
平方开根 - 牛顿迭代(板子整理)
查看>>
java string字符拼接符"+"的研究
查看>>
Layui表格编辑【不依赖Layui的动态table加载】
查看>>
HDU2087剪花布条(KMP)
查看>>
NOIP2018普及初赛解析
查看>>
jQuery中$.extend(true,object1, object2);深拷贝对象
查看>>
圆角和倒角
查看>>