当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
提前致谢。
答案 0 :(得分:7)
您的读者正在返回所有值,但代码 -
returnvalue = test.GetString(0);
将继续使用从datareader返回的下一个值覆盖returnvalue
变量,这样您将只剩下最后一个值。
您可以创建字符串列表 -
List<string> list = new List<string>();
然后将返回的每个值添加到列表中 -
while (test.Read())
{
list.Add(test.GetString(0));
}
然后从函数返回列表而不是字符串。
答案 1 :(得分:3)
使用数据阅读器,您只需提取一个问题名称,并在每次阅读时覆盖其值 - 然后返回最后一项。而只需使用List<string>
来保存所有值并返回:
List<string> questionNames = new List<string>();
while (test.Read())
{
questionNames.Add(GetString(0));
}
答案 2 :(得分:2)
while (test.Read())
{
returnvalue = test.GetString(0);
}
有你的问题。你循环多次,每次用最后一个值覆盖它,然后返回一次。
您需要一个列表和.add()代替。