1

我有一个不返回预期数据值的代码块。

protected void Page_Load(object sender, EventArgs e)
{
corpEmployee.Employee editEmp = new corpEmployee.Employee();

editEmp.EmployeeID = PatientCustomerID.Value;
corpCustomerMgr.GetEmployeeRecord(editEmp);

tboxFirstName.Text = editEmp.EmpFirstName.ToString();
tboxLastName.Text = editEmp.EmpLastName.ToString();
tboxCity.Text = editEmp.EmpCity.ToString();
tboxAddress.Text = editEmp.EmpAddrLine1.ToString();
}  


public static void GetEmployeeRecord(corpEmployee.Employee QueryData)
{
    try
    {
        List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
        corpCustomerDAL.GetEmployeeData(empRecord, QueryData);
    }
    catch (Exception ex)
    {
    LogAppError(ex.ToString());
    }
}  

执行时corpCustomerDAL.GetEmployeeData(empRecord, QueryData); ,empRecord 与具有正确属性值的 Employee 对象一起返回。但是,当代码返回时corpCustomerMgr.GetEmployeeRecord(editEmp);,员工对象具有空值。

如何将 Employee 对象值返回给 Page_Load 例程?

4

4 回答 4

2

您可以在静态方法中返回对象,GetEmployeeRecord也可以ref在参数前面包含,以便将员工作为参考传递,而不是复制变量。

我建议将您的数据返回与使用ref作为您的方法名称似乎具有误导性,以及其他原因。

于 2012-07-25T20:11:45.937 回答
1

根据您的评论,您似乎正在填充empRecord所需的员工数据。最简单的选择是从以下位置返回填充的记录GetEmployeeRecord

public static corpEmployee.Employee GetEmployeeRecord(corpEmployee queryData)
{
    List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
    corpCustomerDAL.GetEmployeeData(empRecord, QueryData);
    return empRecord.Count == 0 ? null : empRecord[0];  //or empRecord.FirstOrDefault()
}

然后,您应该将处理程序的开始更改Page_Load为:

corpEmployee.Employee queryEmp = new corpEmployee.Employee();
queryEmp.EmployeeID = PatientCustomerID.Value;

corpeEmployee.Employee editEmp = corpCustomerMgr.GetEmployeeRecord(queryEmp);
于 2012-07-25T20:55:38.357 回答
0

两个直接的想法出现:

  • 您的异常处理需要工作。你不应该捕捉Exception,也不应该默默地吞下异常。很可能是抛出了异常,这就是您没有获取数据的原因。

  • 你有一个Get***方法——应该返回数据。看来您希望将结果放入对象中……这是从方法中获取数据的一种令人困惑的方式。如果您的方法签名类似于:

    public static Employee GetEmployeeRecord(string employeeId)
    
于 2012-07-25T20:12:57.100 回答
0

最有可能发生的事情是您传入的员工对象正在被复制,并在函数终止时被销毁。为了更好地说明,我添加了一些评论:

public static void GetEmployeeRecord(corpEmployee.Employee QueryData)
{
    //QueryData is a newly created Employee here, and is NOT the same one that was passed in.
    try
    {
        List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
        corpCustomerDAL.GetEmployeeData(empRecord, QueryData);//
        //QueryData now contains the data you want your original object to contain
    }
    catch (Exception ex)
    {
    LogAppError(ex.ToString());
    }
}  //when this function terminates, QueryData ceases to exist.

为了修复它,通过引用传递员工(使用 ref 关键字)而不是通过值传递它,这就是你现在正在做的事情。

于 2012-07-25T20:18:26.873 回答