如何使用c#.net将行索引用作数据集索引

时间:2013-02-15 14:00:52

标签: c# ado.net

我是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);
            }
        }

2 个答案:

答案 0 :(得分:2)

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

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

但该变量是根据min的{​​{1}}和max ID值初始化的。

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

DataRows

<强>更新

  

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

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

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);
    // ...
}

请注意,您应使用var last6Uploaded = ds.Tables["title"].AsEnumerable() .OrderByDescending(r => r.Field<int>("song_id")) .Take(6); foreach(DataRow row in last6Uploaded) { // ... } 字段而不是主键。

答案 1 :(得分:0)

数组索引(i)和song_id 的值应该彼此无关。如果你的song_id从1000开始怎么办?或者,如果您的数据库按song_id按降序索引?