1

我想通过单击访问数据库表中的按钮来一一解答问题。每个问题都是一行,希望通过单击下一行中的“下一个”按钮来获取下一个问题。我已经制作了这段代码,但这直接显示了最后一行表格中的最后一个问题。请在这方面帮助我。因为这与我最后一年的计算机科学学士学位项目有关。

这是我的代码:

OleDbConnection con = new OleDbConnection("provider = Microsoft.ACE.OLEDB.12.0; Data source= E:\\sampleDb.accdb");
con.Open();
OleDbCommand cmd = new OleDbCommand ("select Questions from sampletable", con);
OleDbDataReader dr = cmd.ExecuteReader();
int count = dr.FieldCount;
while (dr.Read())
{                   
     for (int i = 0; i < count; i++)
     {
          label1.Text = dr.GetValue(i).ToString();
     }                   
}

dr.Close();
con.Close();
4

1 回答 1

1

我已经制作了这段代码,但这直接显示了最后一行表格中的最后一个问题。

为什么不应该呢?因为您在查询 ( Questions) 中选择了一列,但您尝试访问从i到 的所有列值count。那是没有意义的。

假设您有10在查询中返回的行。10行列1。所以你的count变量将是10. 所以你的while语句将执行你的for循环10时间。

但是在您的for循环中,何时将i尝试查看当前行的第二列值,但请稍等..!您的查询中没有第二列!因为您只定义了一列您的查询。1GetValue(1)

这是你的第一个问题。

第二个问题是,您使用Label控件,它只是显示一个文本。使用此代码,它仅显示最后一个问题,因为当此代码完成时,您的代码仅显示Questions列的最后一个单元格。因为在每一个循环中,你的label1.Text意志都会改变。所以基本上,在你的代码的最后,它会显示最后一个问题。

如果您尝试显示所有问题,请选择不同的 asp.net 控件而不是Label.

我相信这个解释比仅仅写一些代码对你来说更好。

于 2013-06-08T16:52:27.927 回答