На ярлыке ASP.NET отображается сообщение «System.Data». - PullRequest
2 голосов
/ 12 января 2012

При попытке отобразить данные из базы данных на ярлыке asp: появляется странное сообщение.Во время загрузки страницы метка asp: предназначена для заполнения из источника данных, однако отображается следующее сообщение / текст "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 ]

3 голосов
/ 12 января 2012
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, а не считывали значение.

2 голосов
/ 12 января 2012

Вам необходимо использовать GetValue метод SqlDataReader

SqlDataReader qName = getData(myCommand);
while (qName.Read())
{
   returnValue = qName.GetValue(0).ToString();
}
1 голос
/ 12 января 2012

Проблема в строке ниже - это считыватель данных, а не строка, возвращаемая считывателем данных:

returnValue = qName.ToString();

Вы должны заменить это на

returnValue = qName.GetString(0);
1 голос
/ 12 января 2012

Вы получаете SqlDataReader тип в виде строки. Чтобы прочитать строку из SqlDataReader, вам нужно будет использовать метод GetString. А в качестве параметра вы должны передать индекс поля. Поскольку у вас есть только одно поле, которое вы пытаетесь прочитать, передайте здесь ноль.

Вы должны вернуть значение, как это

returnValue = qName.GetString(0);

В качестве альтернативы вы можете сделать

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

Или вы можете просто написать

returnValue = qName[0].ToString();
0 голосов
/ 12 января 2012

Вы конвертируете qName.ToString(), вы можете попробовать qName[0].ToString();, где [0] является индексом столбца выбора внутри вашей хранимой процедуры.

0 голосов
/ 12 января 2012

Это потому, что вы звоните SqlDataReader.ToString(). Это вернет строку типа, которая на самом деле "System.Data.SqlClient.SqlDataReader".

Использование returnValue = qName.GetString(0);

...