ExecuteReader只返回1个值

HGo*_*mez 2 c# asp.net return executereader

当QuestionnaireID匹配我的查询时,我正在使用ExecuteReader返回QuestionText的值.(参见数据库设计)

但是我的问题是,当我运行项目时,我的ExecuteReader只返回输入的最后一个值.例如,如果我要在问卷ID为1下创建3个问题(A,B,C).ExecuteReader将仅返回问题C.

如何返回QuestionText列中具有相同问卷ID的所有值?

数据库设计

在此输入图像描述

****.**CS

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;        

        }
Run Code Online (Sandbox Code Playgroud)

存储过程

   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
Run Code Online (Sandbox Code Playgroud)

提前致谢.

ipr*_*101 7

您的读者返回所有值但代码 -

returnvalue = test.GetString(0);
Run Code Online (Sandbox Code Playgroud)

将继续returnvalue使用从datareader返回的下一个值覆盖变量,这样您将只剩下最后一个值.

你可以创建一个字符串列表 -

List<string> list = new List<string>();
Run Code Online (Sandbox Code Playgroud)

然后添加返回列表的每个值 -

 while (test.Read())
 { 
     list.Add(test.GetString(0));  
 }
Run Code Online (Sandbox Code Playgroud)

然后从函数返回列表而不是字符串.