2012-01-12 71 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]是选择列的存储过程中的索引。