尝试显示数据库中的数据时,我在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
答案 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列的索引。