IDataReader out put参数没有给出正确的值

时间:2014-07-02 10:31:36

标签: asp.net sql-server

我正在使用Idatareader接口从sql db读取值。我的存储过程中有一个输出参数返回no。行。

这个输出参数我在sql server中获得了正确的值。但是当我试图在我的代码中读取这个值时,它总是返回2。

在网上搜索后发现This,我实施后仍未改变。

             try{
               ObjDb.Open();
               ObjDb.CreateParameters(6);
               ObjDb.AddParameters(0, "@CategoryId", Category);
               ObjDb.AddParameters(1, "@StartDate", Date1);
               ObjDb.AddParameters(2, "@EndDate", Date2);
               ObjDb.AddParameters(3, "@PageIndex", 1);
               ObjDb.AddParameters(4, "@PageSize", 4);
               ObjDb.AddParameters(5, "@RecordCount", System.Data.ParameterDirection.Output);
               IDataReader objReader;
               objReader = ObjDb.ExecuteReader(CommandType.StoredProcedure, "usp_filterevnts");                 
               while (objReader.Read())
               {
               .
               .
               .
               .

               }
         }
       catch (Exception ex)
       {
           throw ex;

       }
       finally
       {
           ObjDb.Close();
           int count = Convert.ToInt32(ObjDb.dbParameters[5].Value);
           System.Web.HttpContext.Current.Session["Count"] = count;
       }
       return Objlist;

如果我在Sql management studio中执行存储过程,它会给我正确的输出值@RecordCount 4

Where as in code behind every time it is 2

1 个答案:

答案 0 :(得分:0)

如果使用输出参数返回记录计数而使用DataReader来使用记录,则应首先处理读取器,然后必须将其关闭。之后您可以读取输出参数值。

while (objReader.Read())
{
   // ...
}
// close the DataReader.
objReader.Close();
// output parameter is now available
int count = Convert.ToInt32(ObjDb.dbParameters["@RecordCount"].Value);
// close the connection