简体   繁体   中英

Looping through records and assigning to a hashtable

I have a SQL table laid out like the below

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

Im trying to loop through each value and assign it to a hashtable and then return the hashtable etc

  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"]); } 

But no matter what i do da["UserAnswer"] is always the first answer...how can i loop through each row in my table and return the values?

Please can someone help me and put me out of my misery.... :-(

But no matter what i do da["UserAnswer"] is always the first answer...

Hmm, I would think it is always the last answer. You overwrite all previous ones.

You get a new record each time you go through the while loop, and QuestionNumber is a column too:

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

Or when you want to (re)number by yourself:

   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;
    }

.Read advances one record at a time. Each of your da["UserAnswer"] calls is operating on the same record.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM