FORREST
04-13-2007, 02:11 AM
各位好:
遇到如下问题,在一个系统中设计了注册用户类 RegUser 和部门类 Department,
一个RegUser必须要属于一个Department,类结构定义如下:
public class RegUser
{
private int id;
private string name;
private datetime regtime;
private Department department;//该用户所属类
//Property操作
//所属部门
public Department Department
{
set
{
this.department=value;
}
get
{
return this.department;
}
}
public RegUser()
{
//to do
}
//根据传入的用户名构造器
public RegUser(string name):this()
{
//在另外一个类RegUserService中进行数据库存取操作
(new RegUserService()).LoginUser(name);
}
}
public class Department
{
private int id;
private bool isManageDept;
private string name;
private ArrayList regUsers;//表示所有该部门下面的RegUser的集合
//从数据库中取得一个部门的信息
public Department(int id):this()
{
(new DepartmentService()).department(id);
}
}
public class RegUserService
{
public RegUser LoginUser(string username)
{
//数据库代码连接得到connection
sqlstr = "select * from reguser where"
//此处省略若干代码
loginuser = new RegUser();
loginuser.ID = datareader["ID"];
loginuser.Name = datareader["Name"];
loginuser.RegTime = datareader["RegTime"];
//获取当前用户的部门
Department department = new Department(deptid);
//得到该对象
loginuser.Department = department;
return loginuser;
}
}
public class DepartmentService
{
public Department Department(int id)
{
Department dept;
SqlConnection conn = DBConnection.OpenConn();
try
{
if (conn != null)
{
//string sqlstr = "SELECT * FROM tb_Department WHERE f_ID = @ID";
string sqlstr = "SELECT * FROM tb_Department WHERE f_ID = " + id;
SqlCommand cmd = new SqlCommand(sqlstr,conn);
//cmd.Parameters.Add("@ID",SqlDbType.Int,4,id.ToString());
cmd.CommandType = CommandType.Text;
SqlDataReader dtr = cmd.ExecuteReader(CommandBehavior.SingleRow);
if (dtr.Read())
{
dept = new Department();
dept.ID = int.Parse(dtr["f_ID"].ToString());
dept.DeptName = dtr["f_DeptName"].ToString();
dept.ContactPerson = dtr["f_ContactPerson"].ToString();
dept.ContactPhone = dtr["f_ContactPhone"].ToString();
dept.ContactEMail = dtr["f_ContactEMail"].ToString();
dept.IsManageDept = bool.Parse(dtr["f_IsManageDept"].ToString());
}
else
{
dept = null;
}
}
else
{
dept =null;
}
}
catch
{
dept = null;
}
finally
{
DBConnection.CloseConn(conn);
}
return dept;
}
}
我的类设计基本就是如上:
一个页面上有如下逻辑:
当一个注册用户所属的部门未管理部门的时候,执行某种工作:
所以我这样做:
RegUser loginUser = new RegUser("xxx");
if (loginUser.Department.IsManageDept)
{
//to do
}
但是在这里发现loginUser.Department总是为null.
我刚开始学习面向对象的编程,怀疑是department传递的时候已经超出了其生存期,所
以丢失了!
请各位帮忙,如果是这个原因,应该怎么在Property Department中操作呢?
谢谢!
遇到如下问题,在一个系统中设计了注册用户类 RegUser 和部门类 Department,
一个RegUser必须要属于一个Department,类结构定义如下:
public class RegUser
{
private int id;
private string name;
private datetime regtime;
private Department department;//该用户所属类
//Property操作
//所属部门
public Department Department
{
set
{
this.department=value;
}
get
{
return this.department;
}
}
public RegUser()
{
//to do
}
//根据传入的用户名构造器
public RegUser(string name):this()
{
//在另外一个类RegUserService中进行数据库存取操作
(new RegUserService()).LoginUser(name);
}
}
public class Department
{
private int id;
private bool isManageDept;
private string name;
private ArrayList regUsers;//表示所有该部门下面的RegUser的集合
//从数据库中取得一个部门的信息
public Department(int id):this()
{
(new DepartmentService()).department(id);
}
}
public class RegUserService
{
public RegUser LoginUser(string username)
{
//数据库代码连接得到connection
sqlstr = "select * from reguser where"
//此处省略若干代码
loginuser = new RegUser();
loginuser.ID = datareader["ID"];
loginuser.Name = datareader["Name"];
loginuser.RegTime = datareader["RegTime"];
//获取当前用户的部门
Department department = new Department(deptid);
//得到该对象
loginuser.Department = department;
return loginuser;
}
}
public class DepartmentService
{
public Department Department(int id)
{
Department dept;
SqlConnection conn = DBConnection.OpenConn();
try
{
if (conn != null)
{
//string sqlstr = "SELECT * FROM tb_Department WHERE f_ID = @ID";
string sqlstr = "SELECT * FROM tb_Department WHERE f_ID = " + id;
SqlCommand cmd = new SqlCommand(sqlstr,conn);
//cmd.Parameters.Add("@ID",SqlDbType.Int,4,id.ToString());
cmd.CommandType = CommandType.Text;
SqlDataReader dtr = cmd.ExecuteReader(CommandBehavior.SingleRow);
if (dtr.Read())
{
dept = new Department();
dept.ID = int.Parse(dtr["f_ID"].ToString());
dept.DeptName = dtr["f_DeptName"].ToString();
dept.ContactPerson = dtr["f_ContactPerson"].ToString();
dept.ContactPhone = dtr["f_ContactPhone"].ToString();
dept.ContactEMail = dtr["f_ContactEMail"].ToString();
dept.IsManageDept = bool.Parse(dtr["f_IsManageDept"].ToString());
}
else
{
dept = null;
}
}
else
{
dept =null;
}
}
catch
{
dept = null;
}
finally
{
DBConnection.CloseConn(conn);
}
return dept;
}
}
我的类设计基本就是如上:
一个页面上有如下逻辑:
当一个注册用户所属的部门未管理部门的时候,执行某种工作:
所以我这样做:
RegUser loginUser = new RegUser("xxx");
if (loginUser.Department.IsManageDept)
{
//to do
}
但是在这里发现loginUser.Department总是为null.
我刚开始学习面向对象的编程,怀疑是department传递的时候已经超出了其生存期,所
以丢失了!
请各位帮忙,如果是这个原因,应该怎么在Property Department中操作呢?
谢谢!