在试图显示数据库数据时,asp:label上显示了一条奇怪的消息。在"System.Data.SqlClient.SqlDataReader"期间,asp:label将从数据源中填充,但是显示以下消息/文本page_load
是什么导致了这一切?
我在.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发布于 2012-01-12 04:31:19
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,而不是读取该值。
发布于 2012-01-12 04:32:13
您需要使用GetValue方法的SqlDataReader
SqlDataReader qName = getData(myCommand);
while (qName.Read())
{
returnValue = qName.GetValue(0).ToString();
}发布于 2012-01-12 04:30:10
您得到的是作为字符串的SqlDataReader类型。要从SqlDataReader中读取字符串,必须使用GetString方法。作为参数,您应该传递字段的索引。因为您只有一个字段,您正在尝试读取,在这里传递零。
您应该像这样返回值
returnValue = qName.GetString(0);或者你也可以
returnValue = qName.GetString("QuestionnaireName");
//this is better to name fields或者你可以简单地写
returnValue = qName[0].ToString();https://stackoverflow.com/questions/8830101
复制相似问题