public IList<ProductInfo> GetProudctsByPage(string tableName, string fieldName, string strWhere, int orderType, string orderBy, int pageSize,int pageIndex, out int RecordCount)
{
  IList<ProductInfo> lists = new List<ProductInfo>();
            SqlParameter[] parms = new SqlParameter[] {
                new SqlParameter("@TableName",SqlDbType.NVarChar,255),
                new SqlParameter("@FieldName",SqlDbType.NVarChar,2000),
                new SqlParameter("@QueryWhere",SqlDbType.NVarChar,2000),
                new SqlParameter("@OrderType",SqlDbType.Int,4),
                new SqlParameter("@OrderBy",SqlDbType.NVarChar,255),
                new SqlParameter("@PageSize",SqlDbType.Int,4),
                new SqlParameter("@PageIndex",SqlDbType.Int,4),
                new SqlParameter("@RecordCount",SqlDbType.Int,4)};
            parms[0].Value = tableName;
            parms[1].Value = fieldName;
            if (string.IsNullOrEmpty(strWhere))
                parms[2].Value = DBNull.Value;
            else
                parms[2].Value = strWhere;
            parms[3].Value = orderType;
            if (string.IsNullOrEmpty(orderBy))
                parms[4].Value = DBNull.Value;
            else
                parms[4].Value = orderBy;
            parms[5].Value = pageSize;
            parms[6].Value = pageIndex;
            parms[7].Value = ParameterDirection.Output;
using (SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "P_Page", parms))
            {
                while (dr.Read())
                {
                    
                    var item=....
                    lists.Add(item);
                }
            }
            RecordCount = Convert.ToInt32(parms[7].Value);
            return lists;
}为什么我这里的parms[7].Value总是等于2。
EXECUTE @RC = [Tree].[dbo].[P_Page] 
   '[Product]'
  ,'field'
  ,null
  ,0
  ,null
  ,1
  ,1
  ,@RecordCount OUTPUT
上面这个是我执行存储过程
执行结果如下图片应该看得到吧

解决方案 »

  1.   

    parms[7].Direction= ParameterDirection.Output;
      

  2.   

    parms[7].Value = ParameterDirection.Output?
    parms[7].Direction=ParameterDirection.Output?
      

  3.   

    因为你最后不是打印@RecordCount declare @RecordCount int 
    EXECUTE [Tree].[dbo].[P_Page]  
      '[Product]'
      ,'field'
      ,null
      ,0
      ,null
      ,1
      ,1
      ,@RecordCount OUTPUT
    print(@RecordCount)
      

  4.   

    @RecordCount 这个print一下,肯定是这个有问题了
      

  5.   

    parms[7].Value = ParameterDirection.Output;这个你错了parms[7].Direction=ParameterDirection.Output;
      

  6.   

    parms[7].Value = ParameterDirection.Output改成
    parms[7].Direction= ParameterDirection.Output
      

  7.   

            public IList<ProductInfo> GetProudctsByPage(string tableName, string fieldName, string strWhere, int orderType, string orderBy, int pageSize,int pageIndex, out int RecordCount)
            {
                int Count = 0;
                IList<ProductInfo> lists = new List<ProductInfo>();
                SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction);
                try
                {
                    conn.Open();
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "P_Page";
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parms = new SqlParameter[] {
                    new SqlParameter("@TableName",SqlDbType.NVarChar,255),
                    new SqlParameter("@FieldName",SqlDbType.NVarChar,2000),
                    new SqlParameter("@QueryWhere",SqlDbType.NVarChar,2000),
                    new SqlParameter("@OrderType",SqlDbType.Int,4),
                    new SqlParameter("@OrderBy",SqlDbType.NVarChar,255),
                    new SqlParameter("@PageSize",SqlDbType.Int,4),
                    new SqlParameter("@PageIndex",SqlDbType.Int,4),
                    new SqlParameter("@RecordCount",SqlDbType.Int,4)};
                    parms[0].Value = tableName;
                    parms[1].Value = fieldName;
                    if (string.IsNullOrEmpty(strWhere))
                        parms[2].Value = DBNull.Value;
                    else
                        parms[2].Value = strWhere;
                    parms[3].Value = orderType;
                    if (string.IsNullOrEmpty(orderBy))
                        parms[4].Value = DBNull.Value;
                    else
                        parms[4].Value = orderBy;
                    parms[5].Value = pageSize;
                    parms[6].Value = pageIndex;
                    parms[7].Direction = ParameterDirection.Output;                foreach (SqlParameter parm in parms)
                        cmd.Parameters.Add(parm);                SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                       
                        var item = new ProductInfo { xx... };
                        lists.Add(item);
                    }
                    dr.Close();
                    //Display the output parameter                Count = Convert.ToInt32(parms[7].Value);// Convert.ToInt32(cmd.Parameters["@RecordCount"].Value);
                }
                catch (SqlException ex)
                {
                    Console.WriteLine("Error:{0}", ex.Message);
                }
                finally
                {
                    conn.Close();
                }
    }我这样子写就有参数输出正确
      

  8.   

    我发现是dbhelper的问题了
     
    try {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear(); //这里把参数给清除了。
                    return rdr;
                }结帖给分