2

ExecuteReaderを使用して、QuestionnaireIDがクエリに一致したときにQuestionTextの値を返しています。(データベース設計を参照)

ただし、私の問題は、プロジェクトを実行すると、ExecuteReaderが最後に入力された値のみを返すことです。たとえば、質問IDが1の場合に3つの質問(A、B、C)を作成すると、ExecuteReaderは質問Cのみを返します。

同じquestionIDを持つQuestionText列のすべての値を返すにはどうすればよいですか?

データベース設計

ここに画像の説明を入力してください

****。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

データリーダーを使用して、1つの質問名のみを取得し、読み取りごとにその値をオーバーライドします。その後、最後の項目を返します。代わりに、を使用しList<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);  
        }

あなたの問題があります。それを複数回ループし、そのたびに最後の値で上書きしてから、1回返します。

代わりにリストと.add()が必要です。

于 2011-11-12T18:56:14.467 に答える