2011-07-17 38 views
1

我想从数据库使用存储过程搜索后,读取文本框的值。请参见下面的示例代码:ASP.NET读取器失败检索值

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。这是一种方法和我传递值如下:

+0

您确定,您对LastName有价值吗? –

+0

其次,你在FullName字符串中得到姓氏? –

+1

你收到了什么错误信息,即为什么你不能继续使用labelSname? –

回答

0

我猜的字段值之一是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 
}