日期:2014-05-20  浏览次数:20421 次

请高手指点:分页的存储过程得不到返回值,都郁闷了两天了!~
存储过程的位置:
http://www.cnblogs.com/hertcloud/archive/2005/12/21/301327.html

我的代码:
SqlConnection   cnn=new   SqlConnection(ConfigurationSettings.AppSettings[ "ConnectionString "]);
SqlCommand   _comm   =   new   SqlCommand( "proc_ListPageInt ",cnn);
_comm.CommandType   =   CommandType.StoredProcedure;
SqlDataReader   dr=null;
_comm.Parameters.Add( "@tblName ",   SqlDbType.NVarChar,   200);
_comm.Parameters[ "@tblName "].Value   =   "   info_public   ";
_comm.Parameters.Add( "@fldName ",   SqlDbType.NVarChar,   500);
_comm.Parameters[ "@fldName "].Value   =   "   *   ";
_comm.Parameters.Add( "@pageSize ",   SqlDbType.Int);
_comm.Parameters[ "@pageSize "].Value   =   5;
_comm.Parameters.Add( "@page ",   SqlDbType.Int);
_comm.Parameters[ "@page "].Value   =   1;
_comm.Parameters.Add( "@fldSort ",   SqlDbType.NVarChar,   200);
_comm.Parameters[ "@fldSort "].Value   =   "   infoid     ";
_comm.Parameters.Add( "@Sort ",   SqlDbType.Bit);
_comm.Parameters[ "@Sort "].Value   =   true;
_comm.Parameters.Add( "@strCondition ",   SqlDbType.NVarChar,   1000);
_comm.Parameters[ "@strCondition "].Value   = "     ";
_comm.Parameters.Add( "@ID ",   SqlDbType.NVarChar,   150);
_comm.Parameters[ "@ID "].Value   =   "   infoid   ";
_comm.Parameters.Add( "@Counts ",   SqlDbType.Int,   0);
_comm.Parameters[ "@Counts "].Direction   =   ParameterDirection.Output;
_comm.Parameters.Add( "@pageCount ",   SqlDbType.Int,   0);
_comm.Parameters[ "@pageCount "].Direction   =   ParameterDirection.Output;
cnn.Open();
dr=_comm.ExecuteReader();
//dr.Read();//有没有都一样去不到值!
string   gdds= "ff ";
gdds=(string)_comm.Parameters[ "@Counts "].Value;
Response.Write(gdds);//网页上没有任何东西输出!

dr   有值,而out   int   counts,out   int   pageCounts   取不到值  

就80分了,全部给了!~

------解决方案--------------------
没有那么严重的,明天上班去调试一下,现在没有环境.
如果查询分析器里执行没有问题,则一定是调用的时候出了问题
------解决方案--------------------
不能用ExecuteReader

用ExecuteNonQuery才可以

但是这样执行两次 好麻烦(执行ExecuteNonQuery 返回输出参数值,执行ExecuteReader,返回SqlDataReader )

所以我不用输出参数 而是获取一个dataset,
在这个dataset里有两个表 一个是你要输出的参数值
一个是查询的记录 可以根据需要返回 好多表
比如:存储过程里有语句:
select 'aaa '
select 'bbb '
dataset里有两个表 分别存放了 记录 'aaa ' 和 'bbb '
------解决方案--------------------
可以使用ExecuteReader ,不能正确返回输出参数,是因为数据读取器没有关闭就去获取输出参数。建议在DataReader 读至数据末尾关闭后再进行输出。