1

アクセスデータベーステーブルからボタンをクリックして質問を1つずつ取得したい。各質問は 1 つの行であり、次のすべての行から「次へ」ボタンをクリックして、次のすべての質問を取得したいと考えています。私はこのコードを作成しましたが、これは最後の行の表の最後の質問を直接示しています。これで私を助けてください。これは、BS コンピューター サイエンスの最終年度のプロジェクトに関連しているためです。

これは私のコードです:

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

私はこのコードを作成しましたが、これは最後の行の表の最後の質問を直接示しています。

なぜそうすべきではないのですか?クエリで 1 つの列を選択したため ( )、 からまでQuestionsのすべての列値にアクセスしようとしています。それは無意味です。icount

10クエリで返される行があるとします。10行と1列。したがって、count変数は になります10。したがって、whileステートメントはforループ10時間を実行します。

しかし、あなたのforループでは、 when iwill be1は、GetValue(1)現在の行の 2 番目の列の値を調べようとしますが、ちょっと待ってください..! クエリに 2 番目の列がありません! クエリの列を 1 つだけ定義したためです。

それがあなたの最初の問題です。

2 番目の問題は、Label単にテキストを表示するコントロールを使用していることです。このコードを使用すると、このコードが終了すると、コードはQuestions列の最後のセルのみを表示するため、最後の質問のみが表示されます。すべてのループで、あなたのlabel1.Text意志は変わるからです。基本的に、コードの最後に、最後の質問が表示されます。

すべての質問を表示しようとする場合は、代わりに別の asp.net コントロールを選択してくださいLabel

この説明は、単にコードを記述するよりも優れていると思います。

于 2013-06-08T16:52:27.927 に答える