使用SqlParameter参数返回值时遇到的问题

王朝mssql·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

原来早就知道可以在调用SQL Server的存储过程,并指定参数的类型为ParameterDirection.Output来返回值,但是今天真正用起来的时候却碰到了问题,

存储过程:

CREATE procedure SqlMembership_GetAllUsers

(@ApplicationName VarChar(255),

@pagesize int,

@pageindex int,

@totalrecords int OUTPUT)

as

select @totalrecords = count(id) from SqlMembership_Users where applicationname=@applicationname

declare @indextable table(id int identity(1,1),nid int)

declare @PageLowerBound int

declare @PageUpperBound int

set @PageLowerBound=(@pageindex-1)*@pagesize

set @PageUpperBound=@PageLowerBound+@pagesize

set rowcount @PageUpperBound

insert into @indextable(nid) select id from SqlMembership_Users where applicationname=@applicationname order by id desc

select O.* from SqlMembership_Users O,@indextable t where O.id=t.nid

and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id

调用代码:

MembershipUserCollection members = new MembershipUserCollection();

SqlDataReader dr;

try

{

SqlCommand cmd = new SqlCommand("SqlMembership_GetAllUsers",conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@ApplicationName",SqlDbType.VarChar,255).Value = this.applicationName;

cmd.Parameters.Add("@PageIndex",SqlDbType.Int).Value = pageIndex;

cmd.Parameters.Add("@PageSize",SqlDbType.Int).Value = pageSize;

SqlParameter parm = new SqlParameter("@totalrecords",SqlDbType.Int);

parm.Direction = ParameterDirection.Output;

cmd.Parameters.Add(parm);

conn.Open();

dr = cmd.ExecuteReader();

while( dr.Read() )

{

members.Add(MembershipUserFromReader(dr));

}

if( dr != null)

{

dr.Close();

}

totalRecords = (int) parm.Value;

}

catch

{

throw;

}

finally

{

conn.Close();

}

return members;

刚开始把红色标出的那句话放在 dr.Close之前,结果一直不能得到返回的值,最后查了一下 DataReader.Close方法才恍然大悟:

MSDN:

Close 方法将填写输出参数的值、返回值和 RecordsAffected,从而增加了关闭用于处理大型或复杂的查询的 SqlDataReader 所用的时间。如果返回值和查询影响的记录的数量不重要,则可以在调用 Close 方法前调用关联的 SqlCommand 对象的 Cancel 方法,从而减少关闭 SqlDataReader 所需的时间。

看来还是实践欠缺了一点啊

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航