ADO.Net 精简的三层架构(初学者)
来源:互联网 发布:红色草原软件 编辑:程序博客网 时间:2024/06/05 08:41
ADO.Net 精简的三层架构(初学者)
DAL(Data Access Layer)
三层架构是企业开发中常用的设计模式,把数据库访问、业务逻辑、界面分离。
初学者直接学习三层架构比较难,因此先学习精简的三层架构,只用DAL层,把数据库访问封装到DAL中,UI调用DAL,原则“UI中不出现SQL”。
DAL常用封装:ToModel、ListAll、GetById、DeleteById、Update、Insert
下面是一个使用DAL的实例:
数据库表
T_Customer定义
代码清单:
配置文件:App.config
<?xml version="1.0" encoding="utf-8" ?><configuration> <connectionStrings> <add name="myconnstr" connectionString="Data Source=.; Initial Catalog = ADOTest; User ID = sa; Password = 123456"/> </connectionStrings></configuration>
/Model:模型类
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ADOTest5.Model{ public class Customer { public long Id {get;set;} public string Name { get; set; } public DateTime? Birthday { get; set; } public string Address { get; set; } public string TelNum { get; set; } public int CustLevel { get; set; } }}
/DAL/CustomerDAL.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using ADOTest5.Model;using System.Data;using System.Data.SqlClient;namespace ADOTest5.DAL{ public class CustomerDAL { //根据Id获取GetById、Update、DeleteById、GetAll、GetPagedData(分页数据) //Insert(插入新数据) //把公共的代码封装到一个方法中,这样可以避免重复性的代码,提高代码复用性 private Customer ToCustomer(DataRow row) { Customer cust = new Customer(); cust.Id = (int)row["Id"]; cust.Name = (string)row["Name"]; cust.Birthday = (DateTime?)SqlHelper.FromDbValue(row["Birthday"]); cust.Address = (string)row["Address"]; cust.CustLevel = (int)row["CustLevel"]; cust.TelNum = (string)row["TelNum"]; return cust; } /// <summary> /// 根据Id查询结果 /// </summary> /// <param name="id"></param> /// <returns></returns> public Customer GetById(long id) { DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Customer where Id = @Id" ,new SqlParameter("@Id",id)); if (dt.Rows.Count <= 0) { return null; } else if (dt.Rows.Count > 1) { throw new Exception("严重错误,查出多条数据!"); } else { DataRow row = dt.Rows[0]; return ToCustomer(row); } } /// <summary> /// 根据Id删除数据 /// </summary> /// <param name="id"></param> public void DeleteById(long id) { SqlHelper.ExecuteNonQuery("delete from T_Customer where Id = @Id", new SqlParameter("@Id", id)); } /// <summary> /// 往数据库中插入数据 /// </summary> /// <param name="customer"></param> public void Insert(Customer customer) { SqlHelper.ExecuteNonQuery(@"Insert into T_Customer(Name, Birthday, Address, TelNum, CustLevel) values(@Name, @Birthday, @Address, @TelNum, @CustLevel)", new SqlParameter("@Name",customer.Name), new SqlParameter("@Birthday",SqlHelper.ToDbValue(customer.Birthday)), new SqlParameter("@Address", customer.Address), new SqlParameter("@TelNum", customer.TelNum), new SqlParameter("@CustLevel",customer.CustLevel)); } /// <summary> /// 更新数据 /// </summary> /// <param name="customer"></param> public void Update(Customer customer) { SqlHelper.ExecuteNonQuery(@"Update T_Customer set Name = @Name, Birthday = @Birthday, Address = @Address, TelNum = @TelNum, CustLevel = @CustLevel where Id = @Id", new SqlParameter("@Name", customer.Name), new SqlParameter("@Birthday", SqlHelper.ToDbValue(customer.Birthday)), new SqlParameter("@Address", customer.Address), new SqlParameter("@TelNum", customer.TelNum), new SqlParameter("@CustLevel", customer.CustLevel)); } /// <summary> /// 查询所有数据 /// </summary> /// <returns></returns> public Customer[] GetAll() { DataTable table = SqlHelper.ExecuteDataTable("select * from T_Customer"); Customer[] customers = new Customer[table.Rows.Count]; for (int i = 0; i < table.Rows.Count; i++) { DataRow row = table.Rows[i]; customers[i] = ToCustomer(row); } return customers; } }}
/DAL/SqlHelper.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data.SqlClient;using System.Data;namespace ADOTest5.DAL{ static class SqlHelper { public static readonly string connstr = ConfigurationManager.ConnectionStrings["myconnstr"].ConnectionString; public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); return cmd.ExecuteNonQuery(); } } } public static object ExecuteScalar(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); return cmd.ExecuteScalar(); } } } public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); DataSet ds = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(ds); return ds.Tables[0]; } } } public static object FromDbValue(object value) { if (value == DBNull.Value) { return null; } else { return value; } } public static object ToDbValue(object value) { if (value == null) { return DBNull.Value; } else { return value; } } }}
- ADO.Net 精简的三层架构(初学者)
- ADO.net三层架构
- .Net的三层架构
- 用VB.net+ADO.NET+SQL Server开发三层架构的运用程序(转载)
- [整理]用三层实现ADO.NET的写法(一)
- [整理]用三层实现ADO.NET的写法(二)
- 三层架构——存储过程(在ADO.net中调用存储过程)例子
- ADO.NET在三层架构中的测试实例
- .NET的三层架构应用
- ASP.net的三层架构
- ASP.NET的三层架构
- .net 三层架构的认识
- .net三层架构的建立
- NET高级开发一:用VB.net+ADO.NET+SQL Server开发三层架构的运用程序
- VC++ ADO实现三层架构
- Spring.NET企业架构 Nhibernate + .NET三层+Spring.net(ado)+ ASP.NET MVC完美结合
- 初涉三层架构,UI层和DAL层的调用,ADO.NET对数据库的数据增删改
- ASP.NET(MVC)三层架构知识的学习总结
- 在三层架构的B层应用TransactionScope事务
- Linux下判断文件或文件夹是否存在的方法
- 各自天涯 各自珍重
- memcached全面剖析–3.memcached的删除机制和发展方向
- 关于QQ2009聊天消息获取原理说明 .
- ADO.Net 精简的三层架构(初学者)
- ZOJ 2433 Highways(水题)
- 虚拟主机安全方案
- 位移进制运算
- memcached全面剖析–4. memcached的分布式算法
- 如何保存Matlab绘制出来的图像
- 从B 树、B+ 树、B* 树谈到R 树
- memcached全面剖析–5. memcached的应用和兼容程序
- awk执行shell命令