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

静111111755

静111111755

2016-01-29 13:12

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

原来早就知道可以在调用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 所需的时间。看来还是实践欠缺了一点啊
展开更多 50%)
分享

猜你喜欢

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

电脑网络
使用SqlParameter参数返回值时遇到的问题

关于线程的参数、“返回值”、及线程的中止

电脑网络
关于线程的参数、“返回值”、及线程的中止

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

使用Data Access Application Block 得到存储过程的返回值

Web开发
使用Data Access Application Block 得到存储过程的返回值

xmlHTTP返回值重编码的优化

Web开发
xmlHTTP返回值重编码的优化

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

关于EJB返回值的解决方案

编程语言 网络编程
关于EJB返回值的解决方案

sql中返回参数的值

编程语言 网络编程
sql中返回参数的值

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Flash MX2004入门与进阶实例——综合实例(1)

Flash MX2004入门与进阶实例——综合实例(1)

Peer-to-Peer (P2P) communication across middleboxes(翻译4)

Peer-to-Peer (P2P) communication across middleboxes(翻译4)
下拉加载更多内容 ↓