在去年,學習資料庫的時候就學過儲存過程了。一直都只知道一些理論,卻不知道如何去使用。
時隔一年,終於找到如何使用儲存過程了。
在機房收費系統中,有些操作,需要多次執行sql語句,多次執行完成才算是完成這個事件流。但是如果其中有乙個環節出了錯誤,那麼沒出錯誤的那些操作是不是就多餘了。
執行儲存過程,就是執行多句sql語句。而事務,是為了控制這些語句 要麼都做,要麼 都不做。
在機房收費系統中,執行sql語句的時候。
一般的sql語句使用方法:定義乙個字串,用於存放sql語句。之後指明commandtype=commandtype.text 如果有引數的情況下,需要提供引數。
使用儲存過程的方法:寫好儲存過程,在vs中直接呼叫,指明commandtype=commandtype.storedprocedure 如果有引數的情況下,需要提供引數。
使用儲存過程,避免了在vs中寫 字串。
接下來看乙個例項。題:設定基本資料,首先需要取消之前使用的基本資料,然後再插入新的基本資料。
首先,把使用的儲存過程預先寫入資料庫。
create procedure [dbo].[setbasicdata]
@rate char(16),@steptime char(16),@leasttime char(16),@mincash char(16),@cardtype char(16),@heaf char(16)
asbegin tran
update t_basic set cardtype='不使用' where cardtype=@cardtype
insert into t_basic values(@rate,@steptime,@leasttime,@mincash,@cardtype,@heaf,default,default)
if @@rowcount<>2 --檢查以上兩條sql語句是否正確執行
rollback tran --沒有正確執行,回滾
else
commit tran --正確執行,提交事務
寫完之後,可以在下面的位置 找到寫好的儲存過程。
在這裡,就省略u層和
b層了。只對比一下
d層的**就可以了。
1、沒有使用儲存過程的d層**
''' ''' 插入新的基本資料
'''
''' 新的基本資料實體
''' 操作人的姓名
''' 返回true表示插入成功,返回false表示失敗
'''
public function setbasicinfo(basic as entity.basicinfoentity, head as string) as boolean implements idal.ibasic.setbasicinfo
dim strsql as string
strsql = "update basicdata_info set status='不使用' where status=@status insert into basicdata_info(rate,steptime,leasttime,preparetime,mincash,head,status) values(@rate,@steptime,@leasttime,@preparetime,@mincash,@head,@status)"
dim helper as new sqlhelper
dim sqlparameter as sqlparameter() =
dim flag as boolean
flag = helper.upddelalter(strsql, commandtype.text, sqlparameter)
return flag
end function
2、使用儲存過程的d層**
''' ''' 設定基本資料
'''
''' 基本資料實體
''' 返回true表示插入成功,返回false表示失敗
'''
public function setbasicdata(basic as entity.basicentity) as boolean implements idal.ibasic.setbasicdata
dim strsql as string = "setbasicdata" '儲存過程名
dim sqlparams as sqlparameter() = '傳入引數
dim helper as new sqlhelper
dim flag as boolean
flag = helper.upddelalter(strsql, commandtype.storedprocedure, sqlparams)
return flag
end function
對比上面的兩種方法。
第一種方法:如果插入的基本資料設定有錯,那麼執行該操作之後,該系統中基本資料就被修改為『不使用』的狀態。出現錯誤。
第二種方法,省去了寫sql語句的麻煩。而且 如果資料庫有變動,不需要修改**。可以直接在sql server中 修改儲存過程,也方便除錯。
總結:使用儲存過成可以提高資料的執行速度。當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。可以極大的提高資料庫的使用效率,減少程式的執行時間,這一點在較大資料量的資料庫的操作中是非常重要的。在**上看,sql語句和程式**語句的分離,可以提高程式**的可讀性
如果有更加優化的方法,歡迎指出!
sql事務和儲存過程
一 sql事務 1.什麼是事務 事務是乙個不可分割的工作邏輯單元,在資料庫系統上執行併發操作時事務是做為最小的控制單元來使用的。他包含的所有資料庫操作命令作為乙個整體一起向系提交或撤消,這一組資料庫操作命令要麼都執行,要麼都不執行。2.事務的語句 開始事物 begin transaction 提交事...
sql事務和儲存過程
一 sql事務 1.什麼是事務 事務是乙個不可分割的工作邏輯單元,在資料庫系統上執行併發操作時事務是做為最小的控制單元來使用的。他包含的所有資料庫操作命令作為乙個整體一起向系提交或撤消,這一組資料庫操作命令要麼都執行,要麼都不執行。2.事務的語句 開始事物 begin transaction 提交事...
Sql 儲存過程 事務
alter procedure dbo usp pe delworklogbill id varchar 50 companycode varchar 50 asdeclare errno int set errno 0 begin tran 開始執行事務 delete from opeworklo...