前言:
不要基于代码编程,要基于图形进行软件设计。
---米老师
机房重构做到充值功能了,首先我把学生表和卡表合并成了一张表,机房重构这也就是我根据功能制作的开始。第一次接触机房先从简单的逻辑入手,注册功能只使用了插入、更新和查询。
其他的访问数据库还好说,因为经过其他窗体功能的练习已经逐渐掌握,在这里就着重总结下查询功能,在建立SQLHelper中我们就能看出查和其他访问数据库是不同的,只有查单独的拿出来做了有参和无参查询语句或存储过程。
当我在D层中真正开始查我的学生表的时候开始是仿照其他的功能照写我们查询导致出现错误,要知道在个人重构可以使用DataTable但到机房合作是都要使用List。
相比较而言List比DataTable有什么优点呢?
DataTable 内存中的数据表 一个二维表
list泛型数组 这里面存放的是一个一个的被对象化的数据模型
建议新建一个类来定义list方法
public class ConvertSQLHelper
{
public List<T> ConvertToModel<T>(DataTable dt) where T : new()
{
//定义集合
List<T> ts = new List<T>();
//获得此模型的类型
Type type = typeof(T);
//定义一个临时的变量
string tempName = "";
//遍历datatable中所有数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T();
//获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍历所有属性
foreach (PropertyInfo pi in propertys)
{
//将此属性赋值给临时变量
tempName = pi.Name;
//检查datatable是否包含此列
if (dt.Columns.Contains(tempName))
{
//判断此属性是否有setter,这个啥意思呢,就是我们的实体层的{get;set;}如果我们的实体有了set方法,就说明可以赋值!
if (!pi.CanWrite) continue;
{
//取值
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
}
//对象添加到泛型集合中
ts.Add(t);
}
return ts;
}
}
D层的查询
//查询 学生表(卡表)
public List<StudentInfo> SltStudent(StudentInfo StudentInfo)
{
SQLHelper sqlHelper = new SQLHelper();
SqlParameter[] sqlParams =
{
new SqlParameter("@cardNo",StudentInfo.cardNo)
};
string sql = @"SELECT * FROM[T_Student]WHERE cardNo=@cardNo";
DataTable dt = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.Text);
ConvertSQLHelper convert = new ConvertSQLHelper();
List<StudentInfo> list = convert.ConvertToModel<StudentInfo>(dt);
return list;
}
B层
//查询所有学生信息
public List<Entity.StudentInfo> GetALLRecharge(Entity.StudentInfo studentInfo)
{
Factory.RechargeFactory fact = new Factory.RechargeFactory();
//实例化工厂
IDAL.RechargeIDAL idal = fact.InsertRechargeInfo();
List<Entity.StudentInfo> list = idal.SltStudent(studentInfo);
return list;
}
外观
//获取所有学生信息
public List<Entity.StudentInfo> GetAllStudentInfo(Entity.StudentInfo student)
{
BLL.RechargeBLL studentBLL = new BLL.RechargeBLL();
List<Entity.StudentInfo> list = studentBLL.GetALLRecharge(student);
return list;
}
接口
//查询学生的接口
List<Entity.StudentInfo> SltStudent(Entity.StudentInfo StudentInfo);
建立list泛型优点:
1,减少输入,传输时只需要传一个实例T就可以获取它的任何属性。
2,正确地构建的泛型类可以真正减少代码中的安全性问题。
3,使用泛型类还可以提高性能。
4,保障程序的安全性