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;
}
}
}
}
分享到:
相关推荐
这款三层架构实现了BLL、DAL、Model,用SQLHelper与SQL Server通信。这款架构只需要修改SQL参数就可以使用,具有方便快捷的特点,既可以用于C#语言的项目开发,也可以用于教学。
这是一个很好的的资源。有利于大家学习ADO.NET,大家一定要看!
C#ADO.NET技术三层模式架构完整学生管理系统基础版本
数据库三层架构,DAL,BLL,UserInterface
基于.net 三层架构项目源码。需要者可以发私信给我。
这是我在学习了。net后完成的一个项目 用的是.net中的三层
C#\C#ADO.NET技术三层模式架构用户管理系统完整版
ADO.net 三层经典DEMO示例,分UI 表示 BLL 逻辑 DAL 数据访问 Tool 辅助工具 MODEL 实体
《ADO.NET 4从入门到精通》主要内容简介:ADO.NET是windows开发平台上的核心数据技术之一。...本章主要面向ADO.NET技术的初学者,要求读者至少掌握visual basic或c#,并对关系数据库系统有初步了解。
数据ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较,主要比较了插入与读取的时间,读取里可以进行模糊检索
本资源主要简介ADO精简入门类及其用法,希望对初学者有帮助!
使用简单三层开发的学员管理系统案例 使用Treeview控件和ListView控件实现表示层
ADO.Net助手是一个获取ADO.Net连接字符串(支持Access,SQLite,SQLServer,MySQL和ORACLE),测试SQL命令,存储过程和数据库之间互导数据的辅助软件。ADO.Net助手还可以用来以插入SQL语句形式导出导入记录,目前提供了...
ACCP5.0 ADO.NET酒店管理系统(三层架构) 内含数据库 图片 代码齐全 绝对实用
ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试...
Professional ADO .NET Programming Professional ADO .NET Programming Professional ADO .NET Programming Professional ADO .NET Programming
三层架构案例 C# ASP.NET三层架构案例 C# ASP.NET
ADO.NET自己封装SqlHelper类 1、简单封装 2、传递参数封装 3、参数可变封装
摘要:基于ASP.NET的WEB应用程序项目,使用程序语言C#,利用ADO.NET访问数据库,实现一个简易的用户登陆注册系统。主要实现的功能有用户登陆、用户注册、找回密码,... 关键字:ASP.NET;ADO.NET;WEB;vs2010;数据库
ADO.NET 高级编程,深入剖析ADO.NET类