BusinessModel businessModel = new BusinessModel();
 byte[] sourceByte = businessModel.querySystemLogByPaging(CurrentPage,ref pageCount);===
   /// <summary>
        /// 分页显示日志
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageCount"></param>
        /// <returns></returns>
        public byte[] querySystemLogByPaging(int pageIndex,ref int pageCount)
        {
            SqlDataComponent dataComponent = new SqlDataComponent();
            DataSet ds=new DataSet();
            try
            {
                if (dataComponent.CallProcedure("[dbo].[querySystemLogByPaging]", true, ds, new object[] { pageIndex, pageCount }))
                {
                    return Compress.CompressDataSet(ds);
                }
                return null;
            }
            catch
            {
                return null;
            }
        }
==
  /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procedureName">存储过程名称</param>
        /// <param name="isReturn">是否返回存储参数</param>
        /// <param name="datasetParam">填充的数据集</param>
        /// <param name="param">存储参数</param>
        /// <returns>执行成功返回True,否则返回False</returns>
        public bool CallProcedure(string procedureName, bool isReturn, DataSet datasetParam, params object[] param)
        {
            int stringParamCount; //存储参数个数
            int i;            SqlConnection db_Conn = new SqlConnection();
            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter sda = new SqlDataAdapter();            bool status = false;            try
            {
                db_Conn.ConnectionString = connString;
                if (db_Conn.State != ConnectionState.Open)
                    db_Conn.Open();
                stringParamCount = param.Length;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = procedureName;
                cmd.Connection = db_Conn;
                SqlCommandBuilder.DeriveParameters(cmd);
                cmd.Parameters.RemoveAt(0);
                for (i = 0; i < stringParamCount; i++)
                {
                    cmd.Parameters[i].Value = param[i];
                }
                sda.SelectCommand = cmd;
                sda.Fill(datasetParam);
                if (isReturn)
                {
                    for (i = 0; i < stringParamCount; i++)
                    {
                        param[i] = cmd.Parameters[i].Value;
                    }
                }
                status = true;            }
            catch (Exception err)
            {
                MethodClass.WriteErrMsg(procedureName + ":" + err.Message);            }
            finally
            {
                if (sda != null) sda.Dispose();
                if (cmd != null) cmd.Dispose();
                if (db_Conn != null)
                {
                    db_Conn.Close();
                    db_Conn.Dispose();
                }
            }
            return status;
        }
分页总数如何通过传递给形参pageCount,用了ref还是没有返回,是params的原因?

解决方案 »

  1.   

    params object[] param)也要带上ref
      

  2.   

    哪里有用到REF了。
    out也可以返回值。(使用间不需要初始化。)
    返加多值的方法也就ref out 和指针了吧。
      

  3.   

    object[] Objs=new object[] { pageIndex, pageCount };
        if (dataComponent.CallProcedure("[dbo].[querySystemLogByPaging]", true, ds, ref Objs)) public bool CallProcedure(string procedureName, bool isReturn, DataSet datasetParam, ref paramsobject[] param) 
      

  4.   

    不要用params object[] param的方式传递
    用SqlParameterCollection
      

  5.   

    list装要返回的数据,你觉得可以吗?
      

  6.   

    个人感觉最好用类,你可以创建一个类,里面可以有你需要的比如像PageSize,PageNo,List,MaxPage,CurrentPage等可以作为属性,传进去的时候可以用这个类的对象,返回值同样也可以用,这样就比较清楚,而且可控性很好,当需要传新值的时候,加个属性就好了,这也充分体现了oop封装的优势。
      

  7.   

    可以了,
     /// <summary> 
            /// 分页显示日志 
            /// </summary> 
            /// <param name="pageIndex"> </param> 
            /// <param name="pageCount"> </param> 
            /// <returns> </returns> 
            public byte[] querySystemLogByPaging(int pageIndex,ref int pageCount) 
            { 
                SqlDataComponent dataComponent = new SqlDataComponent(); 
                DataSet ds=new DataSet(); 
                 object[] obj=new obj[]{pageIndex,pageCount};
                try 
                { 
                    if (dataComponent.CallProcedure("[dbo].[querySystemLogByPaging]", true, ds, new object[] { pageIndex, pageCount })) 
                    { 
                        pageCount=int.Parse(obj[1]);
                        return Compress.CompressDataSet(ds); 
                    } 
                    return null; 
                } 
                catch 
                { 
                    return null; 
                } 
            }