dr=cmd.EndExecuteReader();
==============================
dr = cmd.ExecuteReader();

解决方案 »

  1.   

    dr=cmd.EndExecuteReader()
    是什么,为什么不用ExecuteReader()
    再就是cmd对象是如何生成的,也许问题出在你没给出的代码上
      

  2.   

    --完整代码 
    private int GetTotal() //获取数据的总条数
        {
            string connctionString = ConfigurationManager.ConnectionStrings["SearchConnectionString"].ConnectionString;
            Database data = new Database();
            SqlDataReader dr = null;
            //SqlParameter parameter1 = data.CreateOutParam("@Totals", SqlDbType.Int, 4);
            //SqlParameter[] parameter ={ parameter1 };
            data.RunProc("Pr_GetTotals", out dr);//调用ExecuteReader();
            int totals = 0;
            if (dr.Read())
            {
                totals = Convert.ToInt32(dr["Totals"].ToString());
            }
            return (totals % 20);
        }
      

  3.   

    RunPro是一个封装在类里面的一个方法
    public void RunProc(string procName, out SqlDataReader dataReader) 
    {
    SqlCommand cmd = CreateCommand(procName, null);
    dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }
      

  4.   

    这一类的方法,返回或者输出参数用SqlDataReader对象都是很不合适的,因为连接只要一断,SqlDataReader就没啦
      

  5.   

    1、完全可以用ExecuteScaler。
    2、到数据库中执行看看结果怎样。
      

  6.   

    你的封装有问题,关系到数据库的操作一半在里面一半在外面,应该直接在一个方法里返回你所需要的totals
      

  7.   

    对于查询结果只有一列一行的,只需要用cmd。executescaler();就可以了