C# 访问DataReader中的特定行

C# 访问DataReader中的特定行,c#,asp.net,sqldatareader,datareader,C#,Asp.net,Sqldatareader,Datareader,我有一个数据阅读器,可以在js旋转木马中显示游戏周的列表 我需要能够添加一个if语句来更改当前游戏周的div类 这是我当前的代码: if (dReader.HasRows) { while (dReader.Read()) { gameweekList.Text += "<div class=\"item\"><h4>Gameweek " + (dReader["gameweekID"].T

我有一个数据阅读器,可以在js旋转木马中显示游戏周的列表

我需要能够添加一个if语句来更改当前游戏周的div类

这是我当前的代码:

if (dReader.HasRows) {
    while (dReader.Read()) {                
        gameweekList.Text += "<div class=\"item\"><h4>Gameweek " + 
            (dReader["gameweekID"].ToString()) + "</h4></div>";
    }
} else {
    gameweekList.Text = "Error Finding Gameweeks";
}
dReader.Close();
conn.Close();
if(dReader.HasRows){
while(dReader.Read()){
gameweekList.Text+=“Gameweek”+
(恐惧者[“游戏小子”].ToString())+“”;
}
}否则{
gameweekList.Text=“查找游戏周时出错”;
}
恐惧者。关闭();
康涅狄格州关闭();

实际上,我想添加
if(dreader[1])
然后添加额外的位,这怎么可能呢?

我发现使用数据表或数据集更容易。大概是这样的:

DataTable dt = new DataTable();
dt.Load(dreader)
if (dReader.HasRows) {
    string previousRead = string.Empty;
    dReader.Read();
    previousRead = dReader["gameweekID"].ToString();
    while (dReader.Read()) {
          //use current and previous read 
          //dReader["gameweekID"].ToString()
          //previousRead
          //update previousRead for the next read
          previousRead = dReader["gameweekID"].ToString();
    }
} else {
    gameweekList.Text = "Error Finding Gameweeks";
}
dReader.Close();
conn.Close();

然后,您可以使用DataTable.Rows属性更容易地访问某一行。

如果我没有弄错的话,您可以像这样计算读卡器的读数。然后,当计数适合您时,您可以添加一些不同的内容:

int count = 0;
if (dReader.HasRows) {
    while (dReader.Read()) {
        if(count == 1)  //add special row              
            gameweekList.Text += "something special " + dReader["gameweekID"].ToString();          
        else
            gameweekList.Text += "<div class=\"item\"><h4>Gameweek " + 
            (dReader["gameweekID"].ToString()) + "</h4></div>";
        count++;
    }
} else {
    gameweekList.Text = "Error Finding Gameweeks";
}
dReader.Close();
conn.Close();
那么

if (dReader.HasRows) {
    while (dReader.Read()) {

        if ( dReader["gameweekID"].ToString() == currentWeekId ) 
        {    
            gameweekList.Text += "<div class=\"somethingSpecial\"><h4>Gameweek " + 
            (dReader["gameweekID"].ToString()) + "</h4></div>";
        } 
        else 
        {
            gameweekList.Text += "<div class=\"item\"><h4>Gameweek " + 
            (dReader["gameweekID"].ToString()) + "</h4></div>";
        }
    }
} else {
    gameweekList.Text = "Error Finding Gameweeks";
}
dReader.Close();
conn.Close();
if(dReader.HasRows){
while(dReader.Read()){
如果(恐惧者[“游戏小子”].ToString()==currentWeekId)
{    
gameweekList.Text+=“Gameweek”+
(恐惧者[“游戏小子”].ToString())+“”;
} 
其他的
{
gameweekList.Text+=“Gameweek”+
(恐惧者[“游戏小子”].ToString())+“”;
}
}
}否则{
gameweekList.Text=“查找游戏周时出错”;
}
恐惧者。关闭();
康涅狄格州关闭();

要获取第一行,请从0开始,并始终将其放入数据表中,因为直接从数据读取器读取数据时总会遇到问题

if (dReader.HasRows) {

DataTable dt = new DataTable();
dt.Load(dreader)
gameweekList.Text = dt.Rows[0]["gameweekID"]

}

代码
if(可怕的[1])
将获取
1
索引中列的值。但你是想在某一排?你想进入下一排吗?只是为了概念,我想进入第一排。但是这个可怕的东西[1]不起作用是的,不起作用的原因是,根据定义,数据读取器一次读取并保存内存中的一行数据。它提供了一个只向前、快速的读卡器,您可以在其中读取数百万行,而不消耗任何重要内存。因此,为了获得下一条记录,您必须发出一个
读取
。数据读取器类似于IEnumerable,不支持访问特定索引处的元素。它只能用于迭代项目列表,因此要到达第一行,需要执行Read(),然后应用逻辑。正如尼古拉所说。