2011-11-12 3 views
1

QuestionnaireID가 내 쿼리와 일치 할 때 ExecuteReader를 사용하여 QuestionText 값을 반환합니다. (데이터베이스 디자인 참조)ExecuteReader가 1 개의 값만 반환합니다.

그러나 내 문제는 프로젝트를 실행할 때 내 ExecuteReader 입력 된 마지막 값을 반환합니다. 예를 들어, 설문지 ID 1에 3 개의 질문 (A, B, C)을 작성하려는 경우 ExecuteReader는 질문 C 만 반환합니다.

동일한 설문지 ID를 가진 QuestionText 열의 모든 값을 어떻게 반환 할 수 있습니까?

데이터베이스 설계

enter image description here

****. CS **

USE [devworks_oscar] 
    GO 
    /****** Object: StoredProcedure [hbo].[GetQuestion] Script Date: 11/12/2011 13:12:36 ******/ 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    ALTER PROCEDURE [hgomez].[GetQuestion] 
     (
     @QUEST_ID int 
     ) 
    AS 
     /*SET NOCOUNT ON;*/ 
     SELECT QuestionText FROM [Questions] WHERE QuestionnaireID = @QUEST_ID 
     RETURN 

감사에 저장 프로 시저

public string GetQuestionName(int QuestionnaireID) 
     { 
      string returnvalue = string.Empty; 
      SqlCommand myCommand = new SqlCommand("GetQuestion", _productConn); 
      myCommand.CommandType = CommandType.StoredProcedure; 
      myCommand.Parameters.Add(new SqlParameter("@QUEST_ID", SqlDbType.Int)); 
      myCommand.Parameters[0].Value = QuestionnaireID; 
      _productConn.Open(); 
      SqlDataReader test = myCommand.ExecuteReader(); 
      while (test.Read()) 
      { 
       returnvalue = test.GetString(0); 
      } 
      _productConn.Close(); 
      return returnvalue;   

     } 

dvance.

returnvalue = test.GetString(0); 

당신이 마지막 값으로 남아있을 것입니다 수 있도록하여 DataReader에서 반환 된 다음 값으로 returnvalue 변수를 덮어 유지합니다 -

+1

이 실제 코드 대신 단지 List<string>의 모든 값을 보유하고를 반환하는 데 사용? 루프에서'returnvalue'를 덮어 쓰지 않고 마지막으로 할당 된 값을 반환하고 있습니까? –

답변

6

독자는 모든 값하지만 코드를 반환한다.

당신은 문자열 목록을 만들 수 있습니다 - 각 값을 추가

List<string> list = new List<string>(); 

목록에 반환 -

while (test.Read()) 
{ 
    list.Add(test.GetString(0)); 
} 

다음 문자열 대신 함수에서 목록을 반환합니다.

+0

+1. 문제와 해결책에 대한 좋은 설명. –

+0

감사합니다. 아주 좋은 설명. 'returnValue = string.Join ("\ n", list.ToArray());를 사용하여 목록을 반환했습니다. return returnValue; ' – HGomez90

2
while (test.Read()) 
     { 
      returnvalue = test.GetString(0); 
     } 

문제가 있습니다. 여러 번 반복하면서 매번 마지막 값으로 덮어 쓰고 한 번 반환합니다.

목록을 원하면 .add()를 사용하십시오.

3

데이터 판독기를 사용하여 질문 이름 하나만 선택하고 각 읽기에서 값을 무시한 다음 마지막 항목을 반환합니다.

List<string> questionNames = new List<string>(); 
while (test.Read()) 
{ 
    questionNames.Add(GetString(0)); 
} 
+0

+1. 수정을위한 좋은 샘플 코드. –

관련 문제