public class Students
{
public string Address { get; set; }
public int? Weight { get; set; }
public int? Tall { get; set; }
public string Gender { get; set; }
public string Birthday { get; set; }
public string Name { get; set; }
public int Id { get; set; }
}
第3步,按照添加Model类库文件的做法添加一个DAL类库文件,名字叫Student.DAL。因为上面提到过实体类贯穿三层,因此DAL层要添加对Model的引用,在。在类库文件下新建SQLHelper类用于实现数据库操作,新建StudentDAL类用于接收来自BLL层的增删改查处理。
public class StudentDAL
{
public DataTable Select()
{
DataTable table = SqlHelper.ExecuteQuery("select * from Student");
return table;
}
}
SqlHelper类代码:
class SqlHelper
{
private static readonly string connStr = ConfigurationManager.ConnectionStrings["testConn"].ConnectionString;
public static SqlConnection createConnection()
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
return conn;
}
//执行查询:select返回多行多列
public static DataTable ExecuteQuery(SqlConnection conn, string sql, params SqlParameter[] parameters)
{
DataTable table = new DataTable();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
using (SqlDataReader reader = cmd.ExecuteReader())
{
table.Load(reader);
}
}
return table;//返回加载的表
}
public static DataTable ExecuteQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = createConnection())
{
return ExecuteQuery(conn, sql, parameters);
}
}
}
注意:SqlHelper类中的ExecuteQuery()方法构成重载,主要是方便DAL层调用这个方法时少传入一个SQLConnection对象的参数,这些都在SqlHelper类内部进行处理并自动调用真正实现查询操作的方法来处理数据了。
public class StudentBLL
{
private StudentDAL sDal = new StudentDAL();
public DataTable Select()
{
return sDal.Select();
}
}
第6步,新建winform窗体应用,这表示UI层。假设名字叫Student.Winform。先using Student.BLL;,然后在窗体上添加一个DataGridView控件,图片如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
StudentBLL bll = new StudentBLL();
DataTable table = bll.Select();
dataGridView1.DataSource = table;
}
}
第8步,将Student.Winform设为启动项并运行程序,如果能观察到运行结果则说明没有问题。
2.有代码生成器可以自动生成三层架构的项目,甚至连数据库增删改查方法都提供了。比如“动软代码生成器”,当然不要太依赖软件的“自动”。
3.或许在做了上面三层架构的练习后,会觉得BLL层的功能微乎其微。实际上在BLL层可以进行逻辑判断,这也正是BLL层的好处所在。比如BLL层拿到DAL层返回过来的数据后,可以进行相应的if判断,确保数据满足业务需求,再返回给UI层。