2012-01-12 7 views
2

データベースからデータを表示しようとすると、奇妙なメッセージがasp:ラベルに表示されています。 Page_Loadの中にASP:ラベルは、データソースから移入されることを意図しては、しかし、これを引き起こしている可能性がどのように次のメッセージ/テキスト「System.Data.SqlClient.SqlDataReader」ASP.NETラベルに "System.Data"というメッセージが表示されています

を表示していますか?

私は、.aspx.csページのページ読み込みに小さな方法を書いています。 LABELNAMEがこのメッセージを表示しているものです。

次のメソッドを呼び出します
public partial class edit_questionnaire : System.Web.UI.Page 
    { 
     OsqarSQL GetData; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      string questionnaireId = Session["qID"].ToString(); 
      int qid = Convert.ToInt32(questionnaireId); 
      GetData = new OsqarSQL(); 
      string name = GetData.GetQuestionnaireName(qid); 
      labelName.Text = name; 

     } 
    } 

:あなたが取得している何

ALTER PROCEDURE [hgomez].[GetQuestionnaireName] 
    (
    @QUEST_ID int 
    ) 
AS 
    /*SET NOCOUNT ON;*/ 
    SELECT QuestionnaireName FROM [Questionnaires] WHERE QuestionnaireID = @QUEST_ID 
    RETURN 

答えて

3
public string GetQuestionnaireName(int questionnaireId) 
    { 
     string returnValue = string.Empty; 
     SqlCommand myCommand = new SqlCommand("GetQuestionnaireName", _productConn); 
     myCommand.CommandType = CommandType.StoredProcedure; 
     myCommand.Parameters.Add(new SqlParameter("@QUEST_ID", SqlDbType.Int)); 
     myCommand.Parameters[0].Value = questionnaireId; 
     SqlDataReader qName = getData(myCommand); 
     while (qName.Read()) 
     { 
      returnValue = qName[0].ToString(); 
     } 
     _productConn.Close(); 
     return returnValue; 
    } 

でこれを置き換える必要があります。

1

public string GetQuestionnaireName(int questionnaireId) 
     { 
      string returnValue = string.Empty; 
      SqlCommand myCommand = new SqlCommand("GetQuestionnaireName", _productConn); 
      myCommand.CommandType = CommandType.StoredProcedure; 
      myCommand.Parameters.Add(new SqlParameter("@QUEST_ID", SqlDbType.Int)); 
      myCommand.Parameters[0].Value = questionnaireId; 
      SqlDataReader qName = getData(myCommand); 
      while (qName.Read()) 
      { 
       returnValue = qName.ToString(); 
      } 
      _productConn.Close(); 
      return returnValue; 
     } 

をそして、このストアドプロシージャを使用しています文字列としてSqlDataReader型です。 SqlDataReaderの文字列を読み取るには、GetStringメソッドを使用する必要があります。パラメータとして、フィールドのインデックスを渡す必要があります。読んでみようとしているフィールドが1つだけあるので、ここで0を渡します。

あなたはまた、あなたが

returnValue = qName.GetString("QuestionnaireName"); 
//this is better to name fields 

を行うことができ、この

returnValue = qName.GetString(0); 

のような値を返す必要がありますそれとも、単に問題が下の行にある

returnValue = qName[0].ToString(); 
1

書くことができます - それはデータリーダー、データリーダーによって返された文字列ではありません:

returnValue = qName.ToString(); 

あなたはあなたのreturnValueにSqlDataReaderのを割り当てるのではなく値を読んでいた

returnValue = qName.GetString(0); 
+0

作品もあります。ありがとう – HGomez90

2

あなたはSqlDataReader.ToString()を呼び出しているためだSqlDataReader

SqlDataReader qName = getData(myCommand); 
while (qName.Read()) 
{ 
    returnValue = qName.GetValue(0).ToString(); 
} 
0

GetValue方法を使用する必要があります。それは実際には"System.Data.SqlClient.SqlDataReader"である型の文字列を返します。

使用returnValue = qName.GetString(0);

0

あなたはqName.ToString()を変換するには、[0]ストアドプロシージャ内の選択列のインデックスであることをqName[0].ToString();を試すことができます。