0

我是 c# 的新手,我正在做一个项目,我正在尝试遍历包含不同值的数据表,并且我的数据库的歌曲 ID 为:1,2,3,4,6,8,9,10 但数据集将此值作为分别为 0,1,2,3,4,5,6,7...谢谢

String sql = "select  title, song_id from up_song where Song_type='Mp3 Tracks' ";
    adpt = new SqlDataAdapter(sql, cn);
    ds = new DataSet();

    adpt.Fill(ds, "title");
    var maxvalue = ds.Tables["title"].AsEnumerable().Max(x => x.Field<int>("song_id"));
    var minvalue = ds.Tables["title"].AsEnumerable().Min(x => x.Field<int>("song_id"));
    for (i =maxvalue; i >= minvalue; --i)
        {
            try
            {
                hyperlink[i] = new HyperLink();
                hyperlink[i].ID = "hyperlink" + i;
                hyperlink[i].Text = ds.Tables["title"].Rows[i].ItemArray[0].ToString();
                hyperlink[i].NavigateUrl = "Downloadpage.aspx";
                hyperlink[i].ForeColor = System.Drawing.Color.White;
                Panel1.Controls.Add(hyperlink[i]);
                Panel1.Controls.Add(new LiteralControl("<br>"));
                HttpCookie coo = new HttpCookie("song");
                coo["sogtit"] = ds.Tables["title"].Rows[i].ItemArray[0].ToString();
                Response.Cookies.Add(coo);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }
4

2 回答 2

2

您正在使用循环变量来访问DataTable此处的行:

coo["sogtit"] = ds.Tables["title"].Rows[i].ItemArray[0].ToString();

但是该变量是从您min的.maxsong_id

我根本不知道你为什么需要这些值,你为什么不循环DataRows

foreach(DataRow row in ds.Tables["title"].Rows)
{
    // ...
    int songID = row.Field<int>("song_id")
    Hyperlink hl = new HyperLink(); // you don't need the array of hyperlinks neither
    hl.ID = "hyperlink" + songID;
    string title = row.Field<string>("title);
    hl.Text = title;
    coo["sogtit"] = title;
    Panel1.Controls.Add(hl);
    // ...
}

更新

我想访问那些最新的上传歌曲,所以我使用 for 循环和索引作为最小值和最大值。我的意思是要访问最新上传的至少 6 首歌曲

您可以使用 Linq 获取最近上传的 6 首歌曲:

var last6Uploaded = ds.Tables["title"].AsEnumerable()
    .OrderByDescending(r => r.Field<int>("song_id"))
    .Take(6);

foreach(DataRow row in last6Uploaded)
{
    // ...
}

请注意,您应该使用DateTime字段而不是主键。

于 2013-02-15T14:10:53.700 回答
0

数组索引 ( i) 和 song_id 的值应该没有任何关系。如果你的 song_id 从 1000 开始呢?或者,如果您的数据库按 song_id 降序索引?

于 2013-02-15T14:08:37.323 回答