/// <summary>
        /// 随机抽取9个有趣的用户
        /// </summary>
        /// <returns></returns>
        public List<UserSetting> GetTopNineUserRandom()
        {
            //用于存放查询出所有的用户Uid
            ArrayList arrays = new ArrayList();
            //用于存放随机出的用户Uid
            List<int> result = new List<int>(9);
            List<UserSetting> userSettings = new List<UserSetting>();
            //执行指定的存储过程返回DataSet
            DataSet ds = DbHelperSQL.RunProcedure("sp_SelectGetAllUserSettings");
            DataTable dt = ds.Tables[0];
            //循环读取DataTable数据并添加到arrays
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                arrays.Add(dt.Rows[i]["s_Uid"]);
            }
            Random random = new Random();
            //从arrays中随机出9个不重复的用户Uid并添加到result这个数组中
            for (int j = 0; j < 9; j++)
            {
                int uid = Convert.ToInt32(random.Next(0, Convert.ToInt32(arrays[arrays.Count - 1])));
                if (arrays.Contains(uid) && !result.Contains(uid))
                {
                    result.Add(uid);
                    arrays.RemoveAt(arrays.IndexOf(uid));
                    continue;
                }
                j--;
            }
            //循环读取result数组中的值
            for (int k = 0; k < result.Count; k++)
            {
                //将每个值存放到IDataParameter中
                IDataParameter[] para = new IDataParameter[] { 
                    new SqlParameter("@s_uid",result[k])
                };
                //执行指定的存储过程,其中para能获取上循环赋的值
                DataSet ds1 = DbHelperSQL.RunProcedure("sp_SelectUserSettingsByUid", para, "userSettings");
                //到这里出现问题,能获取上指定的用户uid并且存储过程无任何问题,但是往下走一读取的数据是相同的数据
                DataTable dt1 = ds1.Tables[0];
                if (dt1.Rows.Count != 1)
                {
                    return null;
                }
                else
                {
                    UserSetting userSetting = new UserSetting();
                    //即就是在给userSetting对象赋值是一直赋的是相同的值,请大家帮帮忙!
                    userSetting.NickName = dt.Rows[0]["nickName"].ToString();
                    userSetting.S_Uid = Convert.ToInt32(dt.Rows[0]["s_Uid"]);
                    userSetting.Head = dt.Rows[0]["head"].ToString();
                    userSettings.Add(userSetting);
                }
            }
            return userSettings;
        }

解决方案 »

  1.   

    select top 9.. order by newid()
    dataTable.Rows[randomSelector.Next(dataTable.Rows.Count)]; 
      

  2.   

    第一步 先检查你的两个存储里面是否一样。估计不可能 这步排除第二步 单步调试你的result[k]这个值 是否每一次都想等如果等的话 请看第三步。
     //从arrays中随机出9个不重复的用户Uid并添加到result这个数组中
                for (int j = 0; j < 9; j++)
                {
                    int uid = Convert.ToInt32(random.Next(0, Convert.ToInt32(arrays[arrays.Count - 1])));
                    if (arrays.Contains(uid) && !result.Contains(uid))
                    {
                        result.Add(uid);
                        arrays.RemoveAt(arrays.IndexOf(uid));
                        continue;
                    }
                    j--;
                }
    单步调试   检查你的uid 是否都是想等呢j--;干啥的?
      

  3.   

    问题已经解决    UserSetting userSetting = new UserSetting();
                        //即就是在给userSetting对象赋值是一直赋的是相同的值,请大家帮帮忙!
                        userSetting.NickName = dt.Rows[0]["nickName"].ToString();
                        userSetting.S_Uid = Convert.ToInt32(dt.Rows[0]["s_Uid"]);
                        userSetting.Head = dt.Rows[0]["head"].ToString();
                        userSettings.Add(userSetting);
    不是dt应该是dt1我发现我越来越二了,这么明显的问题居然没发现!