ASP.NET Reader无法检索值

时间:2011-07-17 12:17:36

标签: asp.net forms

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

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";
    }
}

我可以在fullnamelabelFname中获取值,但我无法前往labelSname。这是一个方法,我传递的值如下:

1 个答案:

答案 0 :(得分:0)

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

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
}