关于连接数据库后释放

zeroczh 2009-04-07 08:26:14
一个基类

class DbObject
{
OledbConnection con;
OledbCommand cmd;
string connectionstring;

public DbObject(){
connectionstring = "......";
conn = new OledbConnection(connectionstring);
}

public DataTable GetDataTable(string strSQL,IPamameter [] pamameters){
cmd = new OledbCommand(conn,strSQL);
conn.open();

foreach (OleDbParameter param in Parameters)
{

cmd.Parameters.Add(param);
}

adap = new OleDbDataAdapter(cmd);

DataTable datatable = new DataTable();

adap.Fill(datatable);

conn.Close();

return datatable;
}

}


那么在conn.Close()方法后,是不是要等待GC来回收资源?

在GetDataTable中,是不用在后面加上cmd.Dispose()或adap.Dispose()能够立即释放资源(conn的资源也会被释放调吗)?


在《WEB站点高级编程》书中的源码中,
数据层的一个方法
	public DataRow Retrieve(int userID)
{
SqlParameter[] parameters = { new SqlParameter("@UserID", SqlDbType.Int, 4) };
parameters[0].Value = userID;

using (DataSet users = RunProcedure( "sp_Accounts_GetUserDetails", parameters, "Users" ))
{
return users.Tables[0].Rows[0];
}
}


users对象被包括在useing中,那么退出作用域时,users会执行Dispose()方法,那么返回一个DataRow不是没用吗(users对象都被释放了)?
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
delphi_new 2009-04-08
  • 打赏
  • 举报
回复
继承IDispose接口,呵呵
liu4545533 2009-04-07
  • 打赏
  • 举报
回复
使用using
syb1045 2009-04-07
  • 打赏
  • 举报
回复
楼主 想法很犀利
Teng_s2000 2009-04-07
  • 打赏
  • 举报
回复
同意2楼,让系统自动Dispose
zeroczh 2009-04-07
  • 打赏
  • 举报
回复
那么在conn.Close()方法后,是不是要等待GC来回收资源?
wuyq11 2009-04-07
  • 打赏
  • 举报
回复
using (conn = new OledbConnection(connectionstring))
{
conn.Open();
...
return return datatable;
}
jinjazz 2009-04-07
  • 打赏
  • 举报
回复
conn也需要dispose

第二个问题,你测试一下就知道了,起码我不会这么写。写代码不能有歧义,既然要用就不要释放。

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧