儲存過程使用

2021-05-24 22:16:39 字數 3945 閱讀 4254

謂儲存過程就是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...