我看三层架构
1.三層架構(gòu)? 代碼清晰,維護(hù)方便,修改簡單
UI(界面 User Interfa)?????????????????????? 顧客
BLL(Business logic Layer) 業(yè)務(wù)邏輯層?????? 售貨員
DAL(Data Access Layer)??? 數(shù)據(jù)訪問層?????? 蛋糕師傅
Model是在三層之間進(jìn)行數(shù)據(jù)傳遞的。
★★★更主要的在于如果從Winform改成asp.net,只要修改UI
如果從SQL server改成Oracel數(shù)據(jù)庫,只要修改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.由于三層架構(gòu)中BLL層和DAL層的模型大都相同,所以可以直接生產(chǎn)一個模板,然后之間進(jìn)行傳值。這個模板就是代碼生成器生成的。
★★★代碼生成器的原理其實(shí)就是利用數(shù)據(jù)庫中系統(tǒng)視圖
select * from INFORMATION_SCHEMA.TABLES (獲取當(dāng)前數(shù)據(jù)庫中所有的表)
select* from INFORMATION_SCHEMA.COLUMNS where table_name='T_cast'(獲取當(dāng)前表中的所以列)
進(jìn)行字符串的拼接,然后進(jìn)行生成。
4.增刪改查的幾種方式。
(1)Insert進(jìn)行插入時,由于需要插入很多的字段,所以UI層直接調(diào)用Model,通過Model的對象,直接傳值給BLL,再通過BLL的對象傳遞給DAL.
列句:★★★聲明一個Model的對象,把UI里要插入的字段,賦值給Model里已經(jīng)定義好的字段屬性。
Model.T_cast cast = new Model.T_cast();
//坐席人員
cast.SitPerson = tbSitPerson.Text.Trim();
//處理人員
cast.dealPerson = tbdealPerson.Text.Trim();
★★★然后直接把Model聲明好的對象傳遞給BLL,并通過BLL返回的插入后自增字段id號的值進(jìn)行判斷
<UI層進(jìn)行傳遞>cast.castID = new BLL.T_castBLL().AddNew(cast); //這里的cast是Model聲明好的對象。(相當(dāng)于我把一個人傳遞給你,它本身帶的姓名,性別等字段也傳遞給你了。)
if (cast.castID > 0)
{
? MessageBox.Show("插入記錄成功");
}
else
{
? MessageBox.Show("失敗了吧?");
}
▲▲由于返回的插入后得到的自增字段ID,返回類型是Int▲▲
<BLL再把Model 對象進(jìn)行傳遞>
public int AddNew2(T_cast model)
{
?return new T_castDAL().AddNew(model);
}
<DAL再對Model對象傳過來的數(shù)據(jù)進(jìn)行操作>
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進(jìn)行修改,刪除時,可以通過返回的bool類型進(jìn)行判斷。
如果是真,表示成功,否則失敗。
<UI層進(jìn)行傳遞>
if (new BLL.T_ClientBLL().Update(clientmod))
{
?? MessageBox.Show("該用戶的信息修改成功");
}
else
{
?? MessageBox.Show("信息修改失敗,請重新進(jìn)行修改");
}
<BLL再把Model 對象進(jìn)行傳遞>
public bool Update(T_Client model)
{
?? return new T_ClientDAL().Update2(model);
}
<DAL再對Model對象傳過來的數(shù)據(jù)進(jìn)行操作>
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;//如果返回的行數(shù)大于0表示為真, 這里傳的是bool類型。
}
(3)如果是獲取所有的信息,即表中所有的數(shù)據(jù)。
<BLL>★★★★★這個時候的類型是范型集合,里面是類名。相當(dāng)于獲取ListAll()這個方法里的所有對象。
public IEnumerable<T_Client> ListAll()
{
? return new T_ClientDAL().ListAll();
}
<DAL>
select * from 這種范型集合,即 datasource 這種
(1).在DAL中先建立一個范型的集合
?public IEnumerable<Login> ListAll()
然后相當(dāng)于一張表里的內(nèi)容以行的形式,傳遞給另外一個方法,通過Model對象讀取里面的內(nèi)容,然后把Model添加到范型集合里面,最后返回這個范型的集合。
public IEnumerable<Login> ListAll() ①聲明一個只讀的范型集合
{
??? List<Login> list = new List<Login>(); ② 用list實(shí)例化一個范型的集合
??? 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進(jìn)行聲明。
★★★也可以說是多個文件組成一個文件。
調(diào)用其他文件中的類,最快的方法是
命名空間.類名 這樣進(jìn)行調(diào)用。
轉(zhuǎn)載于:https://www.cnblogs.com/dmh365/archive/2011/04/18/2019584.html
總結(jié)
- 上一篇: asp.net中关于静态页面生成的代码实
- 下一篇: (整理)ubuntu10.10安装低版本