儲存過程得到三個值

2022-05-01 10:24:06 字數 3976 閱讀 3178

用asp.net與sql server可是緣份最好了,稍大的程式一般第一先考慮的是sql server,只是一些很考慮經濟的才使用access等了。用sql server,為了使資料庫的效率更好,一般都會才取儲存過程,因儲存過程執行速度快,並且可以實現一些高階的查詢等功能。比如傳入一些資料引數,但執行的sql過程可能不同等。

下面就來個例子,建立一新的角色,要求角色的名字不能重複,以下是一儲存過程。

create procedure sp_accountrole_create

@categoryid int,

@rolename nvarchar(10),

@description nvarchar(50),

@roleid int output

asdeclare @count int

-- 查詢是否有相同名稱的記錄

select @count = count(roleid) from account_role where

rolename = @rolename

if @count = 0

insert into account_role

(categoryid, rolename, description) values

(@categoryid, @rolename, @description)

set @roleid = @@identity

return 1

go執行儲存過程的c#過程:

sqlconnection dbconnection = new sqlconnection(mconnectionstring);

sqlcommand command = new sqlcommand( "sp_accountrole_create", dbconnection );

dbconnection.open(connectstring);

// 廢置sqlcommand的屬性為儲存過程

command.commandtype = commandtype.storedprocedure;

command.parameters.add("@categoryid", sqldbtype.int, 4);

command.parameters.add("@rolename", sqldbtype.nvarchar, 10);

command.parameters.add("@description", sqldbtype.nvarchar, 50);

command.parameters.add("@roleid", sqldbtype.int, 4);

// 返回值

command.parameters.add("returnvalue",

sqldbtype.int,

4, // size

parameterdirection.returnvalue,

false, // is nullable

0, // byte precision

0, // byte scale

string.empty,

datarowversion.default,

null );

command.parameters["@categoryid"].value = permission.categoryid;

command.parameters["@rolename"].value = permission.permissionname;

command.parameters["@description"].value = permission.description;

// 可以返回新的id值

command.parameters["@roleid"].direction = parameterdirection.output;

int rowsaffected = command.executenonquery();

下面就來個例子,建立一新的角色,要求角色的名字不能重複,以下是一儲存過程。   

create procedure sp_accountrole_create

@categoryid int,

@rolename nvarchar(10),

@description nvarchar(50),

@roleid int output

asdeclare @count int

-- 查詢是否有相同名稱的記錄

select @count = count(roleid) from account_role where

rolename = @rolename

if @count = 0

insert into account_role

(categoryid, rolename, description) values

(@categoryid, @rolename, @description)

set @roleid = @@identity

return 1

go

執行儲存過程的c#過程:

sqlconnection dbconnection = new sqlconnection(mconnectionstring);

sqlcommand command = new sqlcommand( "sp_accountrole_create", dbconnection );

dbconnection.open(connectstring);

// 廢置sqlcommand的屬性為儲存過程

command.commandtype = commandtype.storedprocedure;

command.parameters.add("@categoryid", sqldbtype.int, 4);

command.parameters.add("@rolename", sqldbtype.nvarchar, 10);

command.parameters.add("@description", sqldbtype.nvarchar, 50);

command.parameters.add("@roleid", sqldbtype.int, 4);

// 返回值

command.parameters.add("returnvalue",

sqldbtype.int,

4, // size

parameterdirection.returnvalue,

false, // is nullable

0, // byte precision

0, // byte scale

string.empty,

datarowversion.default,

null );

command.parameters["@categoryid"].value = permission.categoryid;

command.parameters["@rolename"].value = permission.permissionname;

command.parameters["@description"].value = permission.description;

// 可以返回新的id值

command.parameters["@roleid"].direction = parameterdirection.output;

int rowsaffected = command.executenonquery();

int result = command.parameters["returnvalue"].value;

int newid = command.parameters["@roleid"].value;

功能挺強的吧,可以得到三個值,分別是行影響值,儲存過程返回值,新的id值。

儲存過程三個例子

例項1 統計每年入職的員工個數。可能sql select to char hiredate,yyyy from emp set serveroutput on declare cursor cemp is select to char hiredate,yyyy from emp phiredate...

淺淡站長軟文寫作的三個過程

這個標題寫的有點大,看了一下百科以及相關的書,很多的知識可以進行學習,但站長們如何來給我們的 進行內容填充了,有這麼乙個現象 很多站長寧願花大量的時間去優化 去寫採集演算法,也不願意進行軟文寫作,現在搜尋引擎的演算法越來越強大,如果站長你還不去學會軟文寫作的程式設計客棧話,還天天去採集,那麼最終你會...

得到帳單號碼儲存過程

create procedure dbo.st intelink temp getinvno20070809 得到帳單號碼 clno varchar 20 way bit,mani id varchar 30 output,comnetwork varchar 5 asdeclare i int d...