浅谈牛腩
? ? ? ?牛腩視頻講的還是蠻好的,從開始的軟件安裝-數據庫設計-界面設計到代碼編寫,講的非常詳細。從細節之中學到很多東西。
數據庫時間綁定
? ? ? ? ? ?數據庫中設置了時間綁定,在插入數據的時候不必設置時間參數。插入數據后數據庫會自動獲取插入數據的時間,進行數據庫的填充。當然這樣只能應用于插入數據,如果是更新數據就不可以了。? ? ? ? ?應用:以機房收費為例,在注冊、充值、退卡、上機等地方,只要可以插入數據的地方就可以使用綁定數據的方法,非常方便,不用再界面獲取時間日期,減少了代碼的編寫量。
? ? ? ??
SQL語句
? ? ? 之前在跨表查詢的時候,都是用的視圖,現在發現原來通過SQL語句就可以實現。牛腩老師講的很多SQL語句都很經典。其中利用內連接的方法跨表查詢時,牛腩老師在查詢前10條新聞時,是這樣寫的:
? ? ? ?
? ? ? ?應用:我們機房收費中,做上下機的時候用到了卡表中的類型、用戶類型,又用到了學生信息。不用建立視圖,用內連接的方式我們可以進行查詢(前提是建立數據庫關系圖)
<span style="font-size:18px;"> select En.cardNo, En.type ,Stu.stuName ,stuDeparment,stuGrade from T_EnrollCard Eninner join T_StudentInfo Stu on Stu.cardNo=En.cardNo</span> ? ? ?? ? ? ?如果熟悉數據庫的使用,可以大大簡化我們寫代碼的量。所以多學習一些數據庫的知識是很有必要的。
存儲過程和觸發器
? ? ? ?
? ? ? ? ?在現在理解的基礎上,這兩個是沒有什么區別的。根據百度百科百度情況:觸發器與存儲過程的唯一區別是觸
發器不能執行EXECUTE語句調用,而是在用戶執行Transact-SQL語句時自動觸發執行。
? ? ? ?進行數據庫SQL測試的,如果是存儲過程我們可以使用?EXECUTE+存儲過程名稱進程測試,但是觸發器應該就
不可以了。相比于VS中寫SQL代碼執行SQL語句,存儲過程中寫SQL語句速度會更快一些。之前一直覺著存儲過程應
該少用,后面了解到即使執行一個SQL語句也可以使用存儲過程。相對于在代碼中寫sql語句,在存儲過程中寫代碼比
較好。存儲過程執行SQL語句速度是比較快的。
強大的SqlHelper
? ? ??
private SqlConnection conn = null;private SqlCommand cmd = null;private SqlDataReader sdr = null;public SqlHelper()//構造函數{string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//string connStr = "server=(local);database=newssystem;uid=sa;pwd=123456;";conn = new SqlConnection(connStr);}private SqlConnection GetConn(){if (conn.State == ConnectionState.Closed){conn.Open();}return conn;}/// <summary>/// 有參數的增刪改或存儲過程/// </summary>/// <param name="sql">sql語句或存儲過程</param>/// <param name="paras">參數</param>/// <param name="ct">命令參數</param>/// <returns></returns>public int ExecuteNoQuery(string sql, SqlParameter[] paras, CommandType ct){int res;using (cmd = new SqlCommand(sql, GetConn())){cmd.CommandType = ct;cmd.Parameters.AddRange(paras);res = cmd.ExecuteNonQuery();}return res;}/// <summary>/// 無參數的增刪改/// </summary>/// <param name="sql"></param>/// <returns></returns>public int ExecuteNoQuery(string sql,CommandType ct){int res;using (cmd = new SqlCommand(sql, GetConn())){cmd.CommandType = ct;res = cmd.ExecuteNonQuery();}return res;}/// <summary>/// 執行無參查詢或存儲過程/// </summary>/// <param name="sql">sql查詢語句或存儲過程</param>/// <param name="ct">類型存儲過程還是查詢的sql語句</param>/// <returns>返回集合</returns>public DataTable ExecuteTable(string sql,CommandType ct){DataTable dt=new DataTable ();cmd=new SqlCommand(sql,GetConn());cmd.CommandType = ct;using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)){dt.Load(sdr);}return dt;}/// <summary>/// 執行帶參數的SQL查詢語句或存儲過程/// </summary>/// <param name="sql">SQL查詢語句或存儲過程</param>/// <returns>參數集合</returns>public DataTable ExecuteTable(string sql,SqlParameter[] paras,CommandType ct){DataTable dt = new DataTable();cmd = new SqlCommand(sql, GetConn());cmd.CommandType = ct;cmd.Parameters.AddRange(paras);using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//當資源釋放是同時關閉數據庫{dt.Load(sdr);}return dt;}? ? ? ? ?在我們機房收費中,或是編寫網頁的時候,編寫數據庫是一個很重要的環節,而數據庫的編寫自然要增刪改查,將其抽象成SQLHelper類會方便我們很多。
總結
- 上一篇: 软件测试2
- 下一篇: python是脚本语言、主要用作系统编程