我看三层架构
1.三层架构 代码清晰,维护方便,修改简单
UI(界面 User Interfa) 顾客
BLL(Business logic Layer) 业务逻辑层 售货员
DAL(Data Access Layer) 数据访问层 蛋糕师傅
Model是在三层之间进行数据传递的。
★★★更主要的在于如果从Winform改成asp.net,只要修改UI
如果从SQL server改成Oracel数据库,只要修改DAL就可以了。
2.如何获得自增字段
(1)在插入的时候用 output inserted.stuid
(2)在插入语句的后面带上 select @@identity
列句:
create database T_student
use T_student
create table Student
(
stuid int primary key,
stuname nvarchar(20),
stugender nvarchar(20)
)
insert into T_Student(stuname,stugender) output inserted.stuid
values('张三','女')
insert into T_Student(stuname,stugender) values('张三','女');select @@identity;
3.由于三层架构中BLL层和DAL层的模型大都相同,所以可以直接生产一个模板,然后之间进行传值。这个模板就是代码生成器生成的。
★★★代码生成器的原理其实就是利用数据库中系统视图
select * from INFORMATION_SCHEMA.TABLES (获取当前数据库中所有的表)
select* from INFORMATION_SCHEMA.COLUMNS where table_name='T_cast'(获取当前表中的所以列)
进行字符串的拼接,然后进行生成。
4.增删改查的几种方式。
(1)Insert进行插入时,由于需要插入很多的字段,所以UI层直接调用Model,通过Model的对象,直接传值给BLL,再通过BLL的对象传递给DAL.
列句:★★★声明一个Model的对象,把UI里要插入的字段,赋值给Model里已经定义好的字段属性。
Model.T_cast cast = new Model.T_cast();
//坐席人员
cast.SitPerson = tbSitPerson.Text.Trim();
//处理人员
cast.dealPerson = tbdealPerson.Text.Trim();
★★★然后直接把Model声明好的对象传递给BLL,并通过BLL返回的插入后自增字段id号的值进行判断
<UI层进行传递>cast.castID = new BLL.T_castBLL().AddNew(cast); //这里的cast是Model声明好的对象。(相当于我把一个人传递给你,它本身带的姓名,性别等字段也传递给你了。)
if (cast.castID > 0)
{
MessageBox.Show("插入记录成功");
}
else
{
MessageBox.Show("失败了吧?");
}
▲▲由于返回的插入后得到的自增字段ID,返回类型是Int▲▲
<BLL再把Model 对象进行传递>
public int AddNew2(T_cast model)
{
return new T_castDAL().AddNew(model);
}
<DAL再对Model对象传过来的数据进行操作>
public int AddNew(T_cast model)
{
string sql = "insert into T_cast(ClientID,castCenter,castlevel) output inserted.castID values(@ClientID,@castCenter,@castlevel)";
int castID = (int)SqlHelper.ExecuteScalar
(sql, CommandType.Text, new SqlParameter("castCenter", model.castCenter == null ? (object)DBNull.Value : model.castCenter)
, new SqlParameter("ClientID", model.ClientID == null ? (object)DBNull.Value : model.ClientID)
, new SqlParameter("castlevel", model.castlevel == null ? (object)DBNull.Value : model.castlevel)
);
return castID;
}
(2)Update Delete进行修改,删除时,可以通过返回的bool类型进行判断。
如果是真,表示成功,否则失败。
<UI层进行传递>
if (new BLL.T_ClientBLL().Update(clientmod))
{
MessageBox.Show("该用户的信息修改成功");
}
else
{
MessageBox.Show("信息修改失败,请重新进行修改");
}
<BLL再把Model 对象进行传递>
public bool Update(T_Client model)
{
return new T_ClientDAL().Update2(model);
}
<DAL再对Model对象传过来的数据进行操作>
public bool Update(T_Client model)
{
string sql = "update T_Client set ClientName=@ClientName,Clientgender=@Clientgender where ClientID=@ClientID";
int rows = SqlHelper.ExeNonQuery(sql, CommandType.Text
, new SqlParameter("ClientID", model.ClientID == null ? (object)DBNull.Value : model.ClientID)
, new SqlParameter("ClientName", model.ClientName == null ? (object)DBNull.Value : model.ClientName)
, new SqlParameter("Clientgender", model.Clientgender == null ? (object)DBNull.Value : model.Clientgender)
);
return rows > 0;//如果返回的行数大于0表示为真, 这里传的是bool类型。
}
(3)如果是获取所有的信息,即表中所有的数据。
<BLL>★★★★★这个时候的类型是范型集合,里面是类名。相当于获取ListAll()这个方法里的所有对象。
public IEnumerable<T_Client> ListAll()
{
return new T_ClientDAL().ListAll();
}
<DAL>
select * from 这种范型集合,即 datasource 这种
(1).在DAL中先建立一个范型的集合
public IEnumerable<Login> ListAll()
然后相当于一张表里的内容以行的形式,传递给另外一个方法,通过Model对象读取里面的内容,然后把Model添加到范型集合里面,最后返回这个范型的集合。
public IEnumerable<Login> ListAll() ①声明一个只读的范型集合
{
List<Login> list = new List<Login>(); ② 用list实例化一个范型的集合
DataTable dt = SqlHelper.getDatatable("select * from Login");
foreach (DataRow row in dt.Rows)
{
list.Add(ToModel(row)); ③读取每一行记录,添加到list里
}
return list; ⑤返回list这个范型的集合
}
private static Login ToModel(DataRow row) ④
{
Login model = new Login();
model.Id = (System.Int32)row["Id"];
model.UserName = (System.String)row["UserName"];
model.UserPwd = (System.String)row["UserPwd"];
return model;
}
4.部分类的概念:在class 之前用partial声明
简单说就是多个文件共用一个namespace,class,class前partial进行声明。
★★★也可以说是多个文件组成一个文件。
调用其他文件中的类,最快的方法是
命名空间.类名 这样进行调用。