C# 索引超出范围。必须为非负数且小于集合的大小。参数名称:使用Sqldatareader获取数据时索引

C# 索引超出范围。必须为非负数且小于集合的大小。参数名称:使用Sqldatareader获取数据时索引,c#,asp.net,list,for-loop,sqldatareader,C#,Asp.net,List,For Loop,Sqldatareader,当前,尝试使用SqlDataReader获取数据时出错 参数在列表中,即newcmd.Parameters.Add(“@frmcat”,res[i]) 这是我的密码 SqlDataAdapter adpt = new SqlDataAdapter("SELECT DISTINCT TOP 5 category, COUNT(category) AS totcom FROM coupon_deal WHERE (company LIKE '%" + query + "%') GRO

当前,尝试使用SqlDataReader获取数据时出错 参数在列表中,即newcmd.Parameters.Add(“@frmcat”,res[i])

这是我的密码

        SqlDataAdapter adpt = new SqlDataAdapter("SELECT DISTINCT TOP 5 category, COUNT(category) AS totcom FROM coupon_deal WHERE (company LIKE '%" + query + "%') GROUP BY category ORDER BY totcom DESC", conn);
        DataTable dt = new DataTable();
        adpt.Fill(dt);

        int TotalRow = dt.Rows.Count;

        List<string> res = new List<string>();
        for (int i = 0; i < TotalRow; i++)
        {
            res.Add(dt.Rows[i]["category"].ToString());
        }

        List<string> cl = new List<string>();
        SqlCommand newcmd = new SqlCommand("SELECT company, count(company) AS totcomp from coupon_deal Where (category LIKE @frmcat) GROUP BY company ORDER BY totcomp DESC", conn);
        for (int i = 0; i <= res.Count; i++)
        {
            newcmd.Parameters.Clear();
            newcmd.Parameters.Add("@frmcat", res[i]);
            SqlDataReader sdr = newcmd.ExecuteReader();
            if (sdr.HasRows)
            {
                while (sdr.Read())
                {
                    cl.Add(sdr["company"].ToString());
                }
            }
            sdr.Close();
            sdr.Dispose();
        }
SqlDataAdapter adpt=new SqlDataAdapter(“选择不同的前5个类别,从优惠券交易中将(类别)计算为totcom,其中(类似“%”+query+“%”的公司)按totcom DESC的类别顺序分组”,conn);
DataTable dt=新的DataTable();
调整填充(dt);
int TOTALLOW=dt.Rows.Count;
List res=新列表();
对于(int i=0;i对于(int i=0;i所以i
    for (int i = 0; i < res.Count; i++)
    {
        newcmd.Parameters.Clear();
        newcmd.Parameters.Add("@frmcat", res[i]);
        SqlDataReader sdr = newcmd.ExecuteReader();
        if (sdr.HasRows)
        {
            while (sdr.Read())
            {
                cl.Add(sdr["company"].ToString());
            }
        }
        sdr.Close();
        sdr.Dispose();
    }
for(int i=0;i
这是因为我对你的评论投了更高的票,但不要期望这个答案也是如此。