2014-03-25 23 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;