原来早就知道可以在调用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 所需的时间。
看来还是实践欠缺了一点啊
[办公软件]在sybase中插入图片、PDF、文本文件 [办公软件]安装Sybase ASE [办公软件]linux指令大全(完整篇) [办公软件]Linux新手入门常用命令大全 [办公软件]在RedHat Linux 9里安装gaim0.80 [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法 [办公软件]Linux程序员必读:中文化与GB18030标准 [办公软件]linux指令大全 [办公软件]制作Linux启动盘的四种方法 [办公软件]Linux文件系统的反删除方法
|