實體層在三層架構中的地位:sql
1.實體對象其實是對應着數據庫裏的每張表的,咱們把表裏的字段封裝在1個實體對象裏 當你想用哪一個字段 你就就經過該實體對象的get() set() 把那個字段提取出來 這比你臨時建立1個變量要靈活的多 並且便於程序的維護和擴展.在實際的3層結構開發中,專門有個實體層,他的做用就是便於層和層之間的數據傳遞 ;數據庫
2.實體體現了面向對象程序開發的思想,把大量的數據進行封裝 而後傳遞.固然 若是隻是1,2個參數,那麼傳遞實體或者傳遞變量均可以 。c#
好比你想查詢某個學號的學生信息,那麼你徹底就能夠以ID爲參數傳下去 就不必把他再封裝到實體對象裏;數組
值與引用的區別:架構
將一個變量做爲參數進行傳遞,本質是傳棧空間的存儲內容;框架
if (reader.Read()){ per = new MODEL.Person(); ** // 若是有數據,就建立對象,一行數據就對應着 一個實體類對象 }//讀取一行記錄,從第一行開始,if()的做用是最多一行數據 函數
return comm.ExecuteReader(CommandBehavior.CloseConnection);//中的CommandBehavior.CloseConnection 能夠用做關閉通道的用途;spa
從數據庫表中讀取的數據到c#裏面都會被作一層封裝:1.若是是具體的值,就封裝爲object, 若是是null值就被封裝爲DBNull,這種類型的值不方便用戶後期操做,因此咱們須要將這些類型的值轉換爲面向對象的數據---實體類對象,同時要明確,一行數據就對應着一個實體類對象,對象裏面,包含了,name,cid....這些列內容,再將取出來的數據,object轉換成值類型;對象
例:ci
per.name=reader["name"].tostring();
params 構造函數聲明數組 而不知道數組長度 用的
在方法聲明中的 params 關鍵字以後不容許任何其餘參數,而且在方法聲明中只容許一個 params 關鍵字。
params是指可變參數,它會根據調用方法的實參值生成一具對應長度的數組,如:沒有傳遞實參值,那麼就至關於SqlParameter[] p=new SqlParameter[0];若是傳遞了參數,那麼就至關於SqlParameter[] p=new SqlParameter[]{p,p2,p3,p4};強調:params只能修飾數組
通常是存在於方法聲明當中
例如: public static void UseParams(params int[] list){}
public static void UseParams2(params object[] list) {}
public static SqlDataReader ExecuteReader(string sql,params SqlParameter[] ps){}
注意:
cmd.Parameters的Add方法是增長一個參數,增長多個參數的的時候使用一個foreach循環而已
cmd.Parameters的AddRange方法是增長一個參數的數組
配置文件的應用:
引用中選擇框架,找到System.Configuration這個選項,選擇引用;
在須要調用鏈接字符串的類中加入:readonly static string constr = System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
最中要的是在UI層的配置文件App.config中添加下面的代碼:
<connectionStrings>
<add name="constr" connectionString="Data Source=.;Initial Catalog=ItcastSIM;Integrated Security=True"/>
</connectionStrings>
當須要修改數據庫時候,使用配置文件能夠避免致使程序出錯,若須要修改數據庫,則直接將配置文件找到打開後修改即可;
sqlHelp類的出現,是爲了將重複的代碼,封裝成一個類對象,而後須要的時候就直接調用到該類中的方法,例如sqlDataReader reader=sqlHelp.ExecuteReader(comm,p,p2);