2012-01-12 52 views
2

嘗試顯示數據庫中的數據時,我在asp:標籤上顯示了一條奇怪的消息。在Page_Load中的ASP:標籤是爲了填充然而,從數據源是顯示以下消息/文本「System.Data.SqlClient.SqlDataReader」ASP.NET標籤顯示「System.Data」消息

可能是什麼造成的?

我在.aspx.cs頁面的頁面加載中寫了一個小方法。 標籤是顯示此信息的一個:它調用下面的方法

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; 

     } 
    } 

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

,並使用該存儲過程:

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

你被分配SqlDataReader中您的returnValue而不是讀值替換此。

1

什麼你得到是SqlDataReader鍵入爲字符串。要從SqlDataReader中讀取一個字符串,您將不得不使用GetString方法。而作爲參數,你應該通過字段的索引。由於您只有一個您嘗試讀取的字段在此處傳遞零。

你應該返回值,這樣

returnValue = qName.GetString(0); 

或者你可以做

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

或者你可以簡單地寫

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

的問題是在下面的線 - 這是數據讀取器,而不是數據讀取器返回的字符串:

returnValue = qName.ToString(); 

你應該

returnValue = qName.GetString(0); 
+0

也適用。謝謝 – HGomez90 2012-01-12 04:53:37

2

您需要使用的SqlDataReader

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

那是因爲你在呼喚SqlDataReader.ToString()GetValue方法。這將返回類型的字符串,這實際上是"System.Data.SqlClient.SqlDataReader"

使用returnValue = qName.GetString(0);

0

要轉換qName.ToString(),你可以嘗試用qName[0].ToString(); [0]是選擇列的存儲過程中的索引。