ASP.NET读取器检索值失败

ASP.NET读取器检索值失败,asp.net,forms,Asp.net,Forms,在使用存储过程从数据库中搜索后,我尝试将值读取到文本框中。请参见下面的示例代码: while (reader.Read()) { string firstname = reader["FirstName"].ToString().Trim(); if (!string.IsNullOrEmpty(firstname)) { string fullName = reader["FirstName"].ToString().Trim() +

在使用存储过程从数据库中搜索后,我尝试将值读取到文本框中。请参见下面的示例代码:

while (reader.Read())
{
    string firstname = reader["FirstName"].ToString().Trim();

    if (!string.IsNullOrEmpty(firstname))
    {
        string fullName = reader["FirstName"].ToString().Trim() + 
        reader["LastName"].ToString().Trim();

        labelFname = reader["FirstName"].ToString().Trim();
        labelSname = reader["LastName"].ToString().Trim();
        msg = "Retrieval Successful";
    }
}

我可以获取fullname和LabelName中的值,但无法继续使用LabelName。这是一个方法,我正在按如下方式传递值:

我猜其中一个字段值为null,您正在对该null对象调用Trim方法,它抛出了一个错误。在访问值之前进行适当的空检查

string msg =string.empty;
while (reader.Read())
{
    string fName=string.empty;
    string lName=string.empty;
    string fullName=string.empty;

    if (!reader.IsDBNull(reader.GetOrdinal("FirstName")))
         fName = reader.GetString(reader.GetOrdinal("FirstName"));

    if (!reader.IsDBNull(reader.GetOrdinal("LastName")))
         lName= reader.GetString(reader.GetOrdinal("LastName"));

    fullName=fName.Trim()+ " "+lName.Trim();
    msg = "Retrieval Successful";

}
编辑:将序号索引存储到变量并使用它,而不是每次在循环中调用GetOrdinal,这是一个很好的做法,尤其是处理这么多记录。它将提高代码执行的速度

int fNameLocation = reader.GetOrdinal("FirstName");
while (reader.Read())
{
    string fName=string.empty;
    string lName=string.empty;
    string fullName=string.empty;

    if (!reader.IsDBNull(fNameLocation))
         fName = reader.GetString(fNameLocation );

    //process Other fields
}

您确定,您对LastName有值吗?其次,您在FullName字符串中获取LastName?您收到了什么错误消息,即,为什么不能继续LabelName?是的,我在所有FullName和LastName中都有值:我在所有字段中都有值。我这样调用这个方法:saveToDb.SeachCHIsresul,this.txtName.Text,this.txtSname.Text;如果我不将它用作方法,它将返回所有值,但如果我尝试将其作为方法调用,它将失败。