问个函数返回对象的的问题
函数如下
public DataTable return_dt(string sql)
{
OleDbConnection con=new OleDbConnection(数据库链接字符)
try
{
con.Open();
}
catch (OleDbException err)
{ MessageBox.Show(err.Message); }
OleDbCommand cmd = con.CreateCommand();
cmd.CommandText = sql;//sql语句
try
{
dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
}
catch (OleDbException err)
{
MessageBox.Show(err.Message + cmd.CommandText);
}
cmd.Dispose();
con.Close();
return (dt);
}
函数引用:
DataTable ab= return_dt(string sql);
现在在内存里是有2个DataTable,及函数处理有1个然后又赋值给了ab ,还是说只有1个DataTable 就是ab
------解决方案--------------------DataTable 是引用类型,因此内存里只有一个真正的 DataTable,
即 return_dt(string sql) 的返回值,
当然还有一个引用,即 ab!
解释完毕!
------解决方案--------------------DataTable ab= new DataTable();
ab = return_dt(string sql) ;
=========================
托管堆有两个DataTable
new DataTable();和 return_dt()函数返回的,
但new DataTable()由于在栈中没有引用了,很快会被回收,能用的就只有ab指向的这个return_dt(string sql) ;了
------解决方案--------------------