529
京東網上商城
存儲過程--機房收費係統
1、什麼是存儲過程?
定義:
存儲過程是由流控製和SQL語句書寫的過程,這個過程經編譯和優化後存儲在數據庫服務器中,應用程序使用時隻要調用即可。
在敲機房收費係統的注冊窗體時,注冊窗體如下:
點擊存盤之後,需要進行的操作,將學生信息寫入到T_Student表中,將卡的信息寫入到T_Card表中,將充值信息寫入到T_Recharge表中,如果是不適用存儲過程的話,需要單獨向表中寫入三次數據,每次都有很多重複的對數據庫進行操作的代碼。而用了存儲過程之後,隻需要把相應的參數和語句寫入到數據庫的存儲過程中去,在客戶端直接調用即可。
2、怎樣使用存儲過程?
以上麵的注冊為例,首先新建存儲過程
數據庫會自動彈出一個已經建好主要語句結構的存儲過程,你隻需要在裏麵添加參數和語句即可,存儲過程代碼如下:
USE [ChargeSystem] GO /****** Object: StoredProcedure [dbo].[PROC_Register] Script Date: 07/30/2014 21:30:47 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[PROC_Register] -- Add the parameters for the stored procedure here @stuID varchar(20),@stuName varchar(20),@stuSex varchar(4),@stuDepart varchar(20),@stuGrade varchar(20),@stuClass varchar(20),@stuNote varchar(50), @cardID varchar(10),@cardType varchar(20),@remainCash varchar(4),@registerAdmin varchar(10),@isChecked varchar(20), @userID varchar(11),@rechargeCash varchar(4) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here insert into T_Student(stuID ,stuName ,stuSex ,stuDepart ,stuGrade ,stuClass ,stuNote ) values(@stuID ,@stuName ,@stuSex,@stuDepart,@stuGrade ,@stuClass ,@stuNote ) insert into T_Card (cardID,stuID ,cardType ,remainCash ,registerDate ,registerTime ,registerAdmin ,isChecked ) values(@cardID ,@stuID ,@cardType ,@remainCash ,CONVERT (varchar(20),GETDATE(),120) ,CONVERT (varchar(20),getdate(),108) ,@registerAdmin ,@isChecked ) insert into T_Recharge (cardID ,userID ,rechargeCash ,rechargeDate ,rechargeTime ) values (@cardID ,@userID ,@rechargeCash ,CONVERT (varchar(20),GETDATE(),120) ,CONVERT (varchar(20),getdate(),108) ) END
寫完之後,要執行成功之後才可以調用
DAL層調用代碼
Public Function Register(ByVal enStudent As Entity.StudentEntity, ByVal enCard As Entity.CardEntity, ByVal userID As String, ByVal enRecharge As Entity.RechargeEntity) As Boolean Implements IRegister.Register Dim sqlHelper As New Sqlhelper '實例化sqlHelper類 Dim cmdType As CommandType = CommandType.StoredProcedure '定義命令類型 Dim cmdText As String = "PROC_Register" '數據庫執行字符串 '傳參 Dim parameter As SqlParameter() parameter = {New SqlParameter("@userID", userID), New SqlParameter("@stuName", enStudent.StuName), New SqlParameter("@stuID", enStudent.StuID), New SqlParameter("@cardID", enCard.CardID), New SqlParameter("@stuSex", enStudent.StuSex), New SqlParameter("@stuDepart", enStudent.StuDepart), New SqlParameter("@stuGrade", enStudent.StuGrade), New SqlParameter("@stuClass", enStudent.StuClass), New SqlParameter("@stuNote", enStudent.StuNote), New SqlParameter("@cardType", enCard.CardType), New SqlParameter("@remainCash", enCard.RemainCash), New SqlParameter("@rechargeCash", enRecharge.RechargeCash)} Return sqlHelper.ExcuteAddDelUpdate(cmdText, cmdType, parameter) '返回執行的結果,成功True;否則,False End Function
3、為什麼要使用存儲過程?
1、SQL語句執行時要先編譯,然後再執行,存儲過程就是編譯好的一些SQL語句,應用程序需要時直接調用就行,所以存儲過程比直接使用SQL語句的效率要高。
2、當對數據庫進行複雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此複雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。
3、就比如說注冊的時候,如果過程中出現了bug,那麼你的調試工作的量會很大,而如果用存儲過程的話,若是SQL語句的問題,那你就可以在一個地方對SQL語句進行調試。
最後更新:2017-04-03 05:39:37
上一篇:
STL 概述
下一篇:
在listView中多個listItem布局時,convertView緩存及使用
VMware workstation 9.0.0-812388 密鑰
阿裏雲異構計算產品家族亮相,為人工智能提供全球加速能力
解決Conversion to Dalvik format failed with error 1
安裝ttf格式字體
茶道長|做人做事要會說話,特別是微商更要小心說錯話
Js跑馬燈效果
oracle和sql server取第一條記錄的區別以及rownum詳解
邏輯回歸那些事—使用牛頓法解決實際問題
開發者論壇一周精粹(第二十期) :曬往期雲棲大會的照片或感想,贏2017杭州雲棲大會門票
筆記:Wide & Deep Learning for Recommender Systems