2011-07-17 76 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 
}