2014-03-25 36 views
1

這是爲WebService代碼:對象引用(查看個人資料頁)

[的WebMethod]

public MyUser GetProfile(string username) 
{ 
    MyUser user = null; 
    try 
    { 
     OleDbCommand cmd = conn.CreateCommand(); 

     cmd.CommandText = @"SELECT * FROM [Details] WHERE [UserName] = '" + Username + "'"; 

     //Check for matches 
     OleDbDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow); 

     if (dbReader.HasRows) 
     { 
      user = new MyUser() 
      { 
       FirstName = (string)dbReader["FirstName"], 
       Country = (string)dbReader["Country"], 
       DateOfBirth = (string)dbReader["DateOfBirth"], 
       //DateOfBirth = DateTime.Parse(dbReader["DateOfBirth"].ToString()), 
       EmailAddress = (string)dbReader["EmailAddress"], 
       Password = (string)dbReader["Password"], 
       Surname = (string)dbReader["Surname"], 
       Username = (string)dbReader["UserName"] 
      }; 
     } 

     dbReader.Close(); 
     dbReader.Dispose(); 
    } 
    catch 
    { } 

    return user; 
}//end ViewProfile> 

這是我的代碼調用WebService的

protected void Page_Load(object sender, EventArgs e) 
{ 
    lblUsername.Text = User.Identity.Name + "'s Profile"; 
    Service s = new Service(); 

    MyUser user = s.GetProfile(User.Identity.Name); 

    try 
    { 
     txtCountry.Text = user.Country; 
     txtDOB.Text = user.DateOfBirth.ToString(); 
     txtEmail.Text = user.EmailAddress; 
     txtName.Text = user.FirstName; 
     txtPassword.Text = user.Password; 
     txtSurname.Text = user.Surname; 
     txtUsername.Text = user.Username; 
    } 
    catch (Exception ex) 
    { 
     txtUsername.Text = ex.Message; 
    } 
} 
+1

你從哪裏得到那個錯誤? – Sajeetharan

+2

您的用戶對象或日期分娩是正確的,因爲您沒有對此進行檢查。 –

+2

可能的重複[什麼是NullReferenceException,我該如何解決它?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

回答

0
protected void Page_Load(object sender, EventArgs e) 
    { 
     lblUsername.Text = User.Identity.Name + "'s Profile"; 
     Service s = new Service(); 

     MyUser user = s.GetProfile(User.Identity.Name); 

     try 
     { 
      if(user != null) 
      { 
      txtCountry.Text = user.Country== null? "" : user.Country.ToString(); 
      txtDOB.Text = user.DateOfBirth == null? "" : user.DateOfBirth.ToString(); 
      txtEmail.Text = user.EmailAddress== null? "" : user.EmailAddress.ToString(); 
      txtName.Text = user.FirstName== null? "" : user.FirstName.ToString(); 
      txtPassword.Text = user.Password== null? "" : user.Password.ToString(); 
      txtSurname.Text = user.Surname== null? "" : user.Surname.ToString(); 
      txtUsername.Text = user.Username== null? "" : user.Username.ToString(); 
      } 
     } 
     catch (Exception ex) 
     { 
      txtUsername.Text = ex.Message; 
     } 
    } 
0

如果您有創建該命令的異常或執行該命令,那麼它將被吞下。你應該把服務中的try catch拿出來,或者在catch語句中加一個「throw」。另外,如果發生異常,則不會處理dbreader,最好在創建時添加「使用」。我也會使用參數化查詢來避免sql注入的可能性。

MyUser user = null; 

using (OleDbCommand cmd = conn.CreateCommand()) 
{ 

    cmd.CommandText = @"SELECT * FROM [Details] WHERE [UserName] = @Username"; 
    cmd.AddParameter(new OleDbParameter('@UserName', UserName)); 

    //Check for matches 
    using (OleDbDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow)) 
    { 

    if (dbReader.HasRows) 
    { 
     user = new MyUser() 
     { 
      FirstName = (string)dbReader["FirstName"], 
      Country = (string)dbReader["Country"], 
      DateOfBirth = (string)dbReader["DateOfBirth"], 
      //DateOfBirth = DateTime.Parse(dbReader["DateOfBirth"].ToString()), 
      EmailAddress = (string)dbReader["EmailAddress"], 
      Password = (string)dbReader["Password"], 
      Surname = (string)dbReader["Surname"], 
      Username = (string)dbReader["UserName"] 
     }; 
    } 
    } 
} 

return user;