ASP.NET标签显示“System.Data”消息

时间:2012-01-12 04:24:12

标签: c# asp.net label

尝试显示数据库中的数据时,我在asp:标签上显示一条奇怪的消息。在page_load期间,asp:label意图从数据源填充,但是显示以下消息/文本“System.Data.SqlClient.SqlDataReader”

导致这种情况的原因是什么?

我在.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;

        }
    }

调用以下方法:

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

6 个答案:

答案 0 :(得分: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 :(得分:2)

您需要使用GetValue

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

答案 2 :(得分:1)

您获得的是SqlDataReader字符串类型。要从SqlDataReader中读取字符串,您必须使用GetString方法。作为参数,您应该传递字段索引。因为你只有一个你试图读取的字段在这里传递零。

你应该像这样返回值

returnValue = qName.GetString(0);

或者你可以做

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

或者你可以简单地写

returnValue = qName[0].ToString();

答案 3 :(得分:1)

问题出在下面一行 - 它是一个数据阅读器,而不是数据阅读器返回的字符串:

returnValue = qName.ToString();

您应该用

替换它
returnValue = qName.GetString(0);

答案 4 :(得分:0)

那是因为你正在呼叫SqlDataReader.ToString()。这将返回该类型的字符串,实际上是"System.Data.SqlClient.SqlDataReader"

使用returnValue = qName.GetString(0);

答案 5 :(得分:0)

您正在转换qName.ToString(),您可以尝试qName[0].ToString();,其中[0]是存储过程中select列的索引。