2

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

        }

存储过程

   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

提前致谢。

4

3 回答 3

7

您的读者正在返回除代码之外的所有值 -

returnvalue = test.GetString(0);

将继续returnvalue使用从数据读取器返回的下一个值覆盖变量,因此您将只剩下最后一个值。

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

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

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

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

然后从您的函数返回列表而不是字符串。

于 2011-11-12T18:56:04.330 回答
3

使用数据阅读器,您只选择一个问题名称并在每次读取时覆盖其值 - 然后您返回最后一项。相反,只需使用 aList<string>来保存所有值并返回:

 List<string> questionNames = new List<string>();
 while (test.Read())
 { 
    questionNames.Add(GetString(0));
 }
于 2011-11-12T18:56:52.517 回答
2
while (test.Read())
        { 
           returnvalue = test.GetString(0);  
        }

有你的问题。您要循环多次,每次都用最后一个值覆盖它,然后返回一次。

你想要一个列表和 .add() 代替。

于 2011-11-12T18:56:14.467 回答