上一次寫了第三版,
因為之前無意之間看到一段視頻,說是把系統中所有的SQL語句都做成存儲過程。可以在很大程度上優化系統的SQL執行速度。所以百度了一下細節問題,之后我把所有的SQL語句,都做成了存儲過程。
其實寫存儲過程也很簡單(可能是簡單的系統,不需要太復雜的SQL語句),只需要在數據庫里建立存儲過程,然后在程序之中調用就行。
1.首先先建立存儲過程:
展開使用的數據庫→可編程性→存儲過程。然后右擊,新建存儲過程。
1 set ANSI_NULLS ON 2 set QUOTED_IDENTIFIER ON 3 GO 4 -- ============================================= 5 -- Author: H_F_us 6 -- Create date: 2014年12月29日09:18:01 7 -- Description: 刪除一條員工信息 8 -- ============================================= 9 ALTER PROCEDURE [dbo].[deleteperson]10 11 @id int 12 13 AS14 BEGIN15 16 delete from person where id = @id17 18 END
上面是建立好的存儲過程:
1.其中ALTER PROCEDURE 后面跟的是存儲過程的名稱,只要符合SQL命名規范,可任意選取。
2.AS上面,是SQL語句中要使用到的參數。
3.BEGIN 和 END之間是要執行的SQL語句。
這時候就可以在系統代碼中調用了。
personDAO類中:
1 /// <summary> 2 /// 刪除員工信息 3 /// </summary> 4 /// <param name="id">要刪除員工的id</param> 5 /// <returns>返回真假值:如果是真顯示刪除成功,如果是假顯示刪除失敗</returns> 6 public bool delete(person p) 7 { 8 bool flag = false; 9 10 SqlParameter[] paras = new SqlParameter[]11 {12 new SqlParameter("@id", p.id)13 };14 15 string prd = "deleteperson";16 17 int res = sq.ExecuteNonQuery(prd, paras, CommandType.StoredProcedure);18 19 if (res > 0)20 {21 flag = true;22 }23 24 return flag;25 }
SQLHelper類中:
1 /// <summary> 2 /// 執行帶參數的增刪改SQL語句 3 /// </summary> 4 /// <param name="sql">要執行的SQL語句</param> 5 /// <param name="paras">傳入的參數</param> 6 /// <returns>返回受影響的行數</returns> 7 public int ExecuteNonQuery(string sql, SqlParameter[] paras, CommandType cmt) 8 { 9 cmd = new SqlCommand(sql, getcon());10 11 cmd.CommandType = cmt;12 13 cmd.Parameters.AddRange(paras);15 16 return cmd.ExecuteNonQuery();17 }
注解:*在SQLHelper類中的ExecuteNonQuery方法中添加,CommandType cmt,也就是要指明要執行的是什么類型,之后就可以把原本的SQL語句換成存儲過程,然后在SQLHelper類中,添加cmd.CommandType = cmt; 指定要執行的的類型。
上面就是使用存儲過程執行SQL語句。寫的不是太詳細,但是核心代碼寫了出來,方便以后查看。
新聞熱點
疑難解答