-1

以下のようにレイアウトされたSQLテーブルがあります

QuestionNumber  UserAnswer

1                   4
2                   11
3                   3
4                   2
5                   Y
6                   5
7                   4
8                   1
9                   34
10                  3

各値をループしてハッシュテーブルに割り当て、ハッシュテーブルなどを返そうとしています

 SqlConnection Connection = new SQLAccess().CreateConnection();
                SqlCommand Command = new SqlCommand("GetAllExamAnswersForUser", Connection);
                Command.CommandType = System.Data.CommandType.StoredProcedure;
                Command.Parameters.AddWithValue("@UserID", UserID);
                SqlDataReader da = Command.ExecuteReader();


    while (da.Read())
                    {
                        Details.Add("QuestionNumber1", da["UserAnswer"]);
                        Details.Add("QuestionNumber2", da["UserAnswer"]);
                        Details.Add("QuestionNumber3", da["UserAnswer"]);
                        Details.Add("QuestionNumber4", da["UserAnswer"]);
                        Details.Add("QuestionNumber5", da["UserAnswer"]);
                        Details.Add("QuestionNumber6", da["UserAnswer"]);
                        Details.Add("QuestionNumber7", da["UserAnswer"]);
                        Details.Add("QuestionNumber8", da["UserAnswer"]);
                        Details.Add("QuestionNumber9", da["UserAnswer"]);
                        Details.Add("QuestionNumber10", da["UserAnswer"]);

    }

しかし、何をしても da["UserAnswer"] が常に最初の答えです...テーブルの各行をループして値を返すにはどうすればよいですか?

誰かが私を助けて、私の悲惨さから解放してくれませんか.... :-(

4

2 に答える 2

4

しかし、私が何をしても、da["UserAnswer"] は常に最初の答えです...

うーん、それは常に最後の答えだと思います。以前のものはすべて上書きします。

while ループを通過するたびに新しいレコードを取得し、QuestionNumber も列です。

   while (da.Read())
   {
         string answer = da["UserAnswer"];
         string question = da["QuestionNumber"];
         Details.Add(question, answer);           // one per record
    }

または、自分で (再) 番号を付けたい場合:

   int i = 1;
   while (da.Read())
   {
        //Details.Add("QuestionNumber1", da["UserAnswer"]);
        //Details.Add("QuestionNumber2", da["UserAnswer"]);
        //...

         Details.Add("QuestionNumber" + i, da["UserAnswer"]);
         i = i + 1;
    }
于 2012-05-02T19:38:19.210 に答える
1

.Read は一度に 1 レコードずつ進みます。各 da["UserAnswer"] 呼び出しは同じレコードで動作しています。

于 2012-05-02T19:40:45.013 に答える