rpt.DataSource = reader;
            rpt.DataBind();            if (reader.NextResult())
            {
                if (reader.Read())
                {
                    int RecordCount = Convert.ToInt32(reader[0]);
                }
            }因为SqlDataReader无法取出存储过程的返回值和输出参数,所以改成用SqlDaraReader在下个数据集里取了.
如果先绑定数据的话执行.NextResult()方法会报错:阅读器关闭时尝试调用 NextResult 无效。
如果在.DataBind()之前执行.NextResult()的话,但是取到了,但是DataBind()就绑定不了数据了.
应该如何解决啊? 还有为什么SqlDataReader不能直接获取存储过程的返回值和输出参数?谢谢!...

解决方案 »

  1.   

    SqlDataReader是仅向前游标绑定的话  会执行到尾部 就是游标 读取结束,也就是关闭了这个时候 调用 NextResult  是不行的
      

  2.   

    用SqlHelper操作执行存储过程.
    var para = new SqlParameter[3];
    para[0] = new SqlParameter("@Name", SqlDbType.VarChar);
    para[0].value = Name;
    para[1] = new SqlParameter("@ReturnValue", SqlDbType.int);
    para[1].Direction = ParameterDirection.ReturnValue;
    para[2] = new SqlParameter("@Out", SqlDbType.int);
    para[2].Direction = ParameterDirection.Output;var reader = SqlHelper.ExecuteReader(SqlHelper.Conn, CommandType.StoredProcedure, "sp", para);rpt.DataSource = reader; 
    rpt.DataBind();
    用ExecuteDataSet()可以取到,用ExecuteReader()取不到.
    查了下,好像说要关闭连接才能取到,但是用SqlHelper的话在这里没法关闭连接啊.
      

  3.   

    跟存储过程没什么关系吧,返回DataSet,Object,int都是可以取到的,就是返回DataReader取不到,难道用ExecuteDataSet()或者ExecuteReader()要分不同的存储过程?
      

  4.   

    var reader = SqlHelper.ExecuteReader(SqlHelper.Conn, CommandType.StoredProcedure, "sp", para); 
    在这句之后 取可以取到的
      

  5.   

    有一点很关键ExecuteReader 在数据库连接没有关闭前是没有返回值的必须把数据库连接关闭var reader = SqlHelper.ExecuteReader(SqlHelper.Conn, CommandType.StoredProcedure, "sp", para); reader.Close();之后
      

  6.   

    close()后可以取到,但是数据也绑定不了了啊.
    难道既绑定数据又取回Return Value不用能dataReader只能用dataset吗...= =
      

  7.   

    你可以先把 reader  中的 内容 读取到集合中,或者是 泛型类中这样 绑定集合 或泛型类就可以了。
      

  8.   

    数据集是多表查询的,用泛型也不行,改用DataSet好了...
    非常感谢Sandy945 的迅雷不及掩耳铃之势 的速度...