我想通过点击访问数据库表中的按钮逐个问题。每个问题都是一行,希望通过点击下一行中的“next”按钮来获取每个下一个问题。我已经制作了这段代码,但这直接显示了最后一行表格中的最后一个问题。请帮帮我。因为这与我计算机科学学士学位的最后一年项目有关。
这是我的代码:
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();
答案 0 :(得分:1)
我已经制作了这段代码,但这直接显示了最后一个问题 最后一行表。
为什么不应该呢?因为您在查询中选择了一列(Questions
),但您尝试访问从i
到count
的所有列值。这毫无意义。
假设您有10
行返回查询。带有10
列的1
行。因此,您的count
变量将为10
。因此,您的while
语句将执行for
循环10
次。
但在for
循环中,当i
为1
时,GetValue(1)
会尝试查看当前行的第二列值但等待一分钟......! 您的查询中没有第二列!因为您的查询只定义了一列。
这是你的第一个问题。
第二个问题是,您使用Label
控件,它只显示文本。使用此代码时,只显示最后一个问题,因为此代码完成后,您的代码只会显示Questions
列的最后一个单元格。因为每个循环,你的label1.Text
都会改变。所以基本上,在代码的最后,它将显示最后一个问题。
如果您尝试显示所有问题,请选择不同的asp.net控件而不是Label
。
我相信这种解释对你来说比写一些代码更好。