请高手指点:分页的存储过程得不到返回值,都郁闷了两天了!~
存储过程的位置:
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 读至数据末尾关闭后再进行输出。