謂儲存過程就是transact-sql語句的預編譯集合,這些語句在乙個名稱下儲存並作為乙個單元進行處理。由於儲存過程被預先編譯過,所以執行起來要比單行sql語句效率高出很多,在應用程式開發過程中應盡可能的採用儲存過程進行資料的增加、更新、刪除和查詢操作,以提公升應用程式的整體執行效率。
執行sql server的儲存過程需要如下步驟:
1、生成sqlcommand物件並將其commandtext屬性設定為儲存過程的名稱或包含過程呼叫的 execute語句。
2、增加過程呼叫所需要的引數到sqlcommand物件中,記住將任何輸出引數的direction屬性設定為parameterdirection.output,**如下:
comm.parameters["@msg"].direction=parameterdirection.output;
這些輸出引數可以在儲存過程呼叫中用t-sql output關鍵字定義,也可以在實際過程中用return語句返回。如果用return語句返回執行結果,需要給sqlcommand物件的parameters列表,新增如下**:
comm.parameters.add("return_value",sqldbtype.int);
並將direction屬性設定為parameterdirection.returnvalue,**如下:
comm.parameters["return_value"].direction=parameterdirection.returnvalue;
3、用executenonquery()方法執行sqlcommand物件。
4、讀取任何輸出引數的值。
執行只有返回值的儲存過程
1、後台建立儲存過程
create proc selectserverdate
@date varchar(14) output,@datetime datetime output as
set @date=datename(yy,getdate())+『年』+ datename(mm,getdate())+『月』
+ datename(dd,getdate()) +'日'
set @datetime=getdate()
2、前台呼叫執行儲存過程
sqlcommand cmd=new sqlcommand(「selectserverdate」,con);//建立sqlcommand物件
cmd.commandtype=commandtype.storedprocedure;//設定sqlcommand物件執行型別為儲存過程
cmd.parameters.add(「@date」,sqldbtype.varchar,14);//向parameters引數列表新增引數
cmd.parameters.add("@datetime",sqldbtype.datetime,8);
cmd.parameters[「@date」].direction=parameterdirection.output;//設定引數的輸出型別
cmd.parameters["@datetime"].direction=parameterdirection.output;
cmd.executenonquery();//執行儲存過程
session[「date」]=cmd.parameters[「@date」].value;//獲取儲存過程的返回值
session["datetime"]=cmd.parameters["@datetime"].value;
datetime weekday=new datetime();
weekday=convert.todatetime(cmd.parameters["@datetime"].value);
string date=weekday.dayofweek.tostring();
執行帶輸入引數、輸出引數和返回值的儲存過程
1、後台建立儲存過程
create proc iud_dept(@zxcs as varchar(6),@dept as varchar(10),
@id as uniqueidentifier,@msg varchar(16) output) as
begin tran
begin
if @zxcs='insert'
begin
insert into dept(dept) values(@dept)
endif @zxcs='update'
begin
declare @old_dept varchar(10)
select @old_dept=dept from dept where id=@id
update verify set dept=@dept where dept=@old_dept
update dept set dept=@dept where id=@id
end
if @zxcs='delete'
begin
delete from dept where id=@id
end
end
if @@error<>0
begin
rollback tran
set @msg='資料'+@zxcs+'失敗?'
select @msg--輸出後在前台接收
return 1
endelse
begin
commit tran
set @msg='資料'+@zxcs+'成功!'
select @msg--輸出後在前台接收
return 0
end2、前台呼叫執行儲存過程
//設定增刪改的儲存過程所需要的引數
comm=new sqlcommand("iud_dept",con); //建立sqlcommand物件
comm.commandtype=commandtype.storedprocedure; //設定sqlcommand物件執行型別為儲存過程
comm.parameters.add("@zxcs",sqldbtype.varchar,6); //向parameters引數列表新增引數
comm.parameters.add("@dept",sqldbtype.varchar,10);
comm.parameters.add("@id",sqldbtype.uniqueidentifier);
comm.parameters.add("@msg",sqldbtype.varchar,16);
comm.parameters.add(「return_value」,sqldbtype.int); //有return返回值需要向引數列表新增
comm.parameters["@msg"].direction=parameterdirection.output; //設定引數的輸出型別
comm.parameters[「return_value」].direction=parameterdirection.returnvalue;
comm.parameters[「@zxcs」].value=「insert」;//執行insert操作
comm.parameters[「@dept」].value=「資訊組」;
comm.parameters["@id"].value=new guid("6d739432-3edd-458c-9c52-5c2ea74a5dd6「);
comm.executenonquery();
response.write(comm.parameters["@msg"].value+「
「);
response.write(comm.parameters["return_value"].value +「
「);
if((int32)comm.parameters[「return_value」].value==0)
說明:sql server中的uniqueidentifier資料型別在.net中需要使用new guid()類進行轉換
使用儲存過程
使用儲存過程的目的是 1.通過把過程封裝進單個易於使用的單元中,來簡化操作。2.無須反覆建立一系列步驟,可以確保資料的完整性。3.簡化變更管理。4.改進效能 預編譯 缺點 1.比基本的sql語句更複雜,程式設計師哭暈,dba開心。2.安全許可權問題,資料庫管理員一般都限制儲存過程的建立許可權。只允許...
儲存過程使用
謂儲存過程就是transact sql語句的預編譯集合,這些語句在乙個名稱下儲存並作為乙個單元進行處理。由於儲存過程被預先編譯過,所以執行起來要比單行sql語句效率高出很多,在應用程式開發過程中應盡可能的採用儲存過程進行資料的增加 更新 刪除和查詢操作,以提公升應用程式的整體執行效率。執行sql s...
儲存過程使用
謂儲存過程就是transact sql語句的預編譯集合,這些語句在乙個名稱下儲存並作為乙個單元進行處理。由於儲存過程被預先編譯過,所以執行起來要比單行sql語句效率高出很多,在應用程式開發過程中應盡可能的採用儲存過程進行資料的增加 更新 刪除和查詢操作,以提公升應用程式的整體執行效率。執行sql s...