想一下馬上就要面對面試的節奏啦,其實我總是認為沒什么的,要敢於面對,但是這樣的前提還是自己要有足夠的准備,於是還是在休息的時間自己在復習一下,今天看了一些老師還有友友給的面試題,頓時感覺信心倍增,可是都是一些基礎性的東西,想要在面試的時間好好發揮需要更多的努力,可是現在的我們還有半個月的課程沒有結束,確切說是在學習MVC,但是針對這個我還是很感興趣的,喜歡接觸新的事物是我永遠不會改變的理念,下面就來總結一下我認為需要熟練掌握的一些程序吧。
一.手寫SQLHelper
public static class SQLHelper { //獲取連接字符串 //屬於靜態變量且只讀,項目中所有文檔可以直接使用,但不能修改 private static readonly string connection = ConfigurationManager.ConnectionStrings["sql"].ToString(); public static int ExecuteNonQuery(string sql, CommandType cType, params SqlParameter[] parms) { //創建連接 using (SqlConnection conn = new SqlConnection(connection)) { //打開連接 conn.Open(); //創建command對象 using (SqlCommand cmd = new SqlCommand()) { //連接數據庫 cmd.Connection = conn; //執行sql語句 cmd.CommandText = sql; //判斷執行的是sql語句還是存儲過程 cmd.CommandType = cType; //sql語句中的參數 cmd.Parameters.Add(parms); //延遲加載時間是5s cmd.CommandTimeout = 5; //返回受影響的行數 return cmd.ExecuteNonQuery(); } } } public static int ExecuteScalar(string sql, CommandType cType, params SqlParameter[] parms) { //創建連接 using (SqlConnection conn = new SqlConnection(connection)) { //打開連接 conn.Open(); //創建command對象 using (SqlCommand cmd = new SqlCommand()) { //連接數據庫 cmd.Connection = conn; //執行sql語句 cmd.CommandText = sql; //判斷執行的是sql語句還是存儲過程 cmd.CommandType = cType; //sql語句中的參數 cmd.Parameters.Add(parms); //延遲加載時間是5s cmd.CommandTimeout = 5; //返回首行首列的值 return Convert.ToInt32(cmd.ExecuteScalar()); } } } public static DataTable ExecuteDataTable(string sql, CommandType cType, params SqlParameter[] parms) { //創建連接 using (SqlConnection conn = new SqlConnection(connection)) { //打開連接 conn.Open(); //創建command對象 using (SqlCommand cmd = new SqlCommand()) { //連接數據庫 cmd.Connection = conn; //執行sql語句 cmd.CommandText = sql; //判斷執行的是sql語句還是存儲過程 cmd.CommandType = cType; //sql語句中的參數 cmd.Parameters.Add(parms); //延遲加載時間是5s cmd.CommandTimeout = 5; DataTable dt = new DataTable(); //創建適配器對象 using (SqlDataAdapter adapter = new SqlDataAdapter()) { adapter.Fill(dt); return dt; } } } } public static SqlDataReader ExecuteReader(string sql, CommandType cType, params SqlParameter[] parms) { //創建連接 SqlConnection conn = new SqlConnection(connection); //打開連接 conn.Open(); //創建command對象 using (SqlCommand cmd = new SqlCommand()) { //連接數據庫 cmd.Connection = conn; //執行sql語句 cmd.CommandText = sql; //判斷執行的是sql語句還是存儲過程 cmd.CommandType = cType; //sql語句中的參數 cmd.Parameters.Add(parms); //延遲加載時間是5s cmd.CommandTimeout = 5; //返回讀取的數據,在這里由於reader是一條一條數據的讀取,而且獨占一連接,當我們讀取完數據時間要斷開鏈接 return cmd.ExecuteReader(CommandBehavior.CloseConnection); } } }
雖然之前也寫過好多次的,但是我那時間只是一味的實現其功能,甚至注釋的都沒有寫,也可能是不注重在這方面的更多的練習吧,今天我只是想能夠更加深入的理解SQLHelper中的方法以及實現了那些功能。
二.冒泡排序
public static void BubbleSortt(this int[] arr) { for (int i = 0; i < arr.Length; i++) { for (int j = 0; j < arr.Length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { //比較兩個數 int temp = arr[j + 1]; //此時temp為較小的值 arr[j + 1] = arr[j]; //把最大的值放在后面的一位上面 arr[j] = temp; //a=b;b=c;c=a; } } } } static void Main(string[] args) { int[] arry = new int[] { 1, 2, 3, 4, 1, -1 }; //調用擴展方法 arry.Bubble(); //遍歷輸出排序后的數組 for (int i = 0; i < arry.Length; i++) { Console.Write("\t" + arry[i]); } Console.Read(); }
嘿嘿,寫到冒泡排序,不得不說一下我學習擴展方法的心理,剛開始學習時間就是感覺蠻神奇的,自己還可以在微軟提供好的代碼下增加一些方法,但是后來感覺很是不適應的,現在可以說前幾天就是看到友友寫的冒泡排序我拿過來使用竟然沒看出來是擴展方法直接像普通的方法一樣調用,忽略了this,那時間還問友友他是不是調用方法使用新的語法,后來才知道我竟然忘記了,於是又重新學習了一下擴展方法感覺甚是簡單,也可能是自己實現的功能簡單,但是從根本上面我終於理解了擴展方法,還是蠻激動的。
三.使用三層架構實現增刪改查
[TestClass] public class UnitTest1 { private PersonDal dal; public UnitTest1() { //查詢數據 dal = new PersonDal(); } [TestMethod] public void AddPersonTest() { //添加數據 Person p = new Person() { Name="lala", Age=22 }; bool result = dal.AddPersonMes(p); Assert.IsTrue(result); } [TestMethod] public void DeletePersonTest() { //刪除數據 bool result = dal.DelPersonMes(2); Assert.IsTrue(result); } [TestMethod] public void UpdateTest() { //修改數據 Person p = new Person() {ID=1, Name = "xixi", Age = 23}; bool result = dal.UpdPersonMes(p); Assert.IsTrue(result); } }
public class PersonBll { private DAL.PersonDal dal; public PersonBll() { dal = new PersonDal(); } /// <summary> /// 添加人 /// </summary> /// <param name="p"></param> /// <returns></returns> public bool AddPersonMes(Person p) { return dal.AddPersonMes(p); } /// <summary> /// 刪除 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool DelPersonMes(int id) { return dal.DelPersonMes(id); } /// <summary> /// 修改 /// </summary> /// <param name="p"></param> /// <returns></returns> public bool UpdPersonMes(Person p) { return dal.UpdPersonMes(p); } /// <summary> /// 查詢所有人 /// </summary> /// <returns></returns> public DataTable GetPersonMes() { return dal.GetPersonMes(); } }
public class PersonDal { /// <summary> /// 添加 /// </summary> /// <param name="model">實體類</param> /// <returns></returns> public bool AddPersonMes(Person model) { string sql = "insert into TB_Person values(@Name,@Age)"; SqlParameter[] parms = { new SqlParameter("@Name",model.Name), new SqlParameter("@Age",model.Age) }; return SQLHelper.ExecuteNonQuery(sql,CommandType.Text, parms) > 0; } /// <summary> /// 刪除 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool DelPersonMes(int id) { string sql = "delete from tb_person where id=@id"; SqlParameter parms = new SqlParameter("@id", id); return SQLHelper.ExecuteNonQuery(sql, CommandType.Text, parms) > 0; } /// <summary> /// 修改 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool UpdPersonMes(Person model) { string sql = "update tb_person set name=@name,age=@age where id=@id"; SqlParameter[] parms = { new SqlParameter("@Name",model.Name), new SqlParameter("@Age",model.Age), new SqlParameter("@id",model.ID) }; return SQLHelper.ExecuteNonQuery(sql, CommandType.Text, parms) > 0; } /// <summary> /// 查詢所有人 /// </summary> /// <returns></returns> public DataTable GetPersonMes() { string sql = "select id,name,age from tb_person ;"; return SQLHelper.ExecuteDataTable(sql).Tables[0]; } }
嘿嘿,上面就是使用三成架構實現的增刪改查,其實剛開始一直在使用WebForm實現三層,這樣想要在一個小時內寫完這個我沒能完成,當然使用EF就簡單的多啦,可以說五倍的效率,但是如果讓使用ADO.net實現時間,最好使用單元測試就可以節約時間啦,不用為拖拉服務器端控件而浪費時間,這樣我們在面試時間也可以有更多的時間回答其他的題啦,好啦今天就寫到這里,加油加油!時間僅僅剩下15天,可以說倒計時就要面臨面試,我會努力的。
