ASP.NET中调用存储过程
用asp.net与sql server可是缘份最好了,稍大的程序一般第一先考虑的是sql server,只是一些很考虑经济的才使用access等了。用sql server,为了使数据库的效率更好,一般都会才取存储过程,因存储过程执行速度快,并且可以实现一些高级的查询等功能。比如传入一些数据参数,但执行的sql过程可能不同等。 下面就来个例子,建立一新的角色,要求角色的名字不能重复,以下是一存储过程。 @categoryid int, -- 查找是否有相同名称的记录 if @count = 0 insert into account_role set @roleid = @@identity return 1 (来源www.iocblog.net) command.parameters.add("@categoryid", sqldbtype.int, 4); command.parameters["@categoryid"].value = permission.categoryid; int rowsaffected = command.executenonquery(); 功能挺强的吧,可以得到三个值,分别是行影响值,存储过程返回值,新的id值。
create procedure sp_accountrole_create
@rolename nvarchar(10),
@description nvarchar(50),
@roleid int output
as
declare @count int
select @count = count(roleid) from account_role where
rolename = @rolename
(categoryid, rolename, description) values
(@categoryid, @rolename, @description)
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("@rolename", sqldbtype.nvarchar, 10);
command.parameters.add("@description", sqldbtype.nvarchar, 50);(来源www.iocblog.net)
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["@rolename"].value = permission.permissionname;
command.parameters["@description"].value = permission.description;
// 可以返回新的id值
command.parameters["@roleid"].direction = parameterdirection.output;
int result = command.parameters["returnvalue"].value;
int newid = command.parameters["@roleid"].value;
Tag: 存储过程
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。