为何老是报数据连接池满??狂郁闷!!!(高分征求中!!!)

brando_beat 2005-02-28 02:39:13
我申明了一个公用数据类叫data.cs,中间函数部分代码如下:
public string readout(string sql,string column)
{
  string result;
  SqlConnection Con = new SqlConnection(data.constr);
  SqlCommand objCommand =new SqlCommand(sql,Con);
  SqlDataReader objDataReader ;
  objCommand.Connection.Open();
  objDataReader = objCommand.ExecuteReader();
  if(objDataReader.Read())
    {
result=objDataReader[column].ToString();
Con.Close();
//objDataReader.Close();
objCommand.Dispose();
return result;
}
else
{
 Con.Close();
 objCommand.Dispose();
 return "没有该记录";
}
   }
然后在各个页面调用相应的函数:
例如:
private void initform()
{
try
{
sql = "select ID,顺序号, 来文号, 成文日期, 来文日期, 来文单位,标题, 归档号, 主题词, 页数, 紧急程度, 密级, 公文种类, 领导批示, 处理情况, 处理领导, 处理部门, 处理日期 from 代码_收文管理数据表 ";
sql=sql+" where ID="+Convert.ToInt32(Request.QueryString["ID"]);
LB_LWDW.Text=rs.readout(sql,"来文单位").ToString();
LB_LWH.Text=rs.readout(sql,"来文号").ToString();
LB_SXH.Text=rs.readout(sql,"顺序号").ToString();
LB_LWRQ.Text=rs.readout(sql,"来文日期").Substring(0,4).ToString()+"年"+rs.readout(sql,"来文日期").Substring(4,2).ToString()+"月"+rs.readout(sql,"来文日期").Substring(6,2).ToString()+"日";
LB_CLRQ.Text=rs.readout(sql,"处理日期").Substring(0,4).ToString()+"年"+rs.readout(sql,"处理日期").Substring(4,2).ToString()+"月"+rs.readout(sql,"处理日期").Substring(6,2).ToString()+"日";
LB_LWMC.Text=rs.readout(sql,"标题").ToString();
LB_NBYJ.Text=rs.readout(sql,"处理情况").ToString();
LB_PS.Text=rs.readout(sql,"领导批示").ToString();
}
catch(Exception error)
{
Response.Write(error.ToString());

}
}
在调用后,我在sql_server中看见所有的连接还是存在,没有关闭.
请各位高手告诉我如何解决!!



...全文
750 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
croket 2005-03-01
  • 打赏
  • 举报
回复
前面用objCommand.Connection.Open() 打开,后面也需要用objCommand.Connection.Close();关闭啊,Con和objCommand.Connection并不是同一个。
zhouweiwansui 2005-03-01
  • 打赏
  • 举报
回复
晕死
reader原来还可以这样写,见识了
niunj 2005-03-01
  • 打赏
  • 举报
回复
datareader自己不自动关闭数据库连接,所以需要手工conn.close();
如果用dataset,它可以自动判断使用完后数据库连接有无关闭,如果没有会自动帮你关闭。
brando_beat 2005-03-01
  • 打赏
  • 举报
回复
现在不揭帖,让大家看看我们除了技术以外,还需要提高的地方。
brando_beat 2005-03-01
  • 打赏
  • 举报
回复
首先申明,data.cs不是我写的,我只是写应用层的,具体我理解我们同事是想实现这个功能,就是动态读取表中子段,因为是个公用类,
再说,wacle([Smile!]) 你说话的时候好像你一下子就懂.net似的,不管人家懂不懂,人家帮我解决问题,态度上是好的,但是你嘲笑我的态度,我就知道你大概也就是在某个没有发展的地方,而且人品有问题
zhiyd 2005-03-01
  • 打赏
  • 举报
回复
这种问题建议用单类模式解决
heiding 2005-03-01
  • 打赏
  • 举报
回复
public string readout(string sql,string column)
{
  string result;
  SqlConnection Con = new SqlConnection(data.constr);
  SqlCommand objCommand =new SqlCommand(sql,Con);
  SqlDataReader objDataReader ;
  objCommand.Connection.Open();
  objDataReader = objCommand.ExecuteReader();
  if(objDataReader.Read())
    {
result=objDataReader[column].ToString();
Con.Close();
//objDataReader.Close();
objCommand.Dispose();
return result;
}
else
{
 Con.Close();
 objCommand.Dispose();
 return "没有该记录";
}
   }
上面的代码需要重构,参照 wacle([Smile!]) 同志的意见。我给你一个地址去查查详细的资料:
http://search.microsoft.com/search/results.aspx?view=zh-cn&st=a&na=81&qu=datareader
liuyong_lll 2005-02-28
  • 打赏
  • 举报
回复
你想要什么数据?

我严重同意下边这种说法,如果你数据量很大,用readrer是个好方法,但是如你上边所写,简直是..........要命!

SqlDataReadre要占用连接池,你这样的效率太低

你应该构造一个继承IList的数据结构,来保存所有的数据查询结果,然后从这个IList结果中读取想要的值.
大致结构这样就比较好了:
public IList readout(string sql)
{
try{ connect();}
catch{ doexception();}
finally{ disconnect();}
}
wacle 2005-02-28
  • 打赏
  • 举报
回复
你去看看msdn吧,datareader你还不懂.
wacle 2005-02-28
  • 打赏
  • 举报
回复
没想到这么简单的一个数据库连接关闭问题,竟看到了某些星级人物在这不负责任地乱加评论,有没有看过PetShop???
楼主,你的代码写的实在太臭,datareader本身的数据读取性能比DATASET要快许多,但你这样一用,就把DataReader给毁了,就一条SQL 查询,读一个字段就connect一次数据库???
用完之后立即关闭数据库,close方法应当在finally里面,避免由于异常造成的数据连接消耗.
你应该构造一个继承IList的数据结构,来保存所有的数据查询结果,然后从这个IList结果中读取想要的值.
大致结构这样就比较好了:
public IList readout(string sql)
{
try{ connect();}
catch{ doexception();}
finally{ disconnect();}
}
datareader执行的时候可以用这个参数来显示地告诉CLR,当datareader关闭的时候,connection会自动关闭command.executereader(commandBehavior.closeConnection);
在finally部分,在关闭数据库连接之前,一定要先关闭datareader,即reader.close();connection.close();
yyne 2005-02-28
  • 打赏
  • 举报
回复
老老实实进行关闭..
Dlandiao 2005-02-28
  • 打赏
  • 举报
回复
DataSet还不是用DataReader填充的,主要是你没有即使处理连接和reader的关闭。
建议在用reader时,加入try,并在finnaly中关闭。
fanweiwei 2005-02-28
  • 打赏
  • 举报
回复
学习
brando_beat 2005-02-28
  • 打赏
  • 举报
回复
谢谢各位,深受教育,晚上结贴,各位就我下面的如何用dataset修改这个函数在给点意见
zxilu 2005-02-28
  • 打赏
  • 举报
回复
DataReader使用后要关闭

brando_beat 2005-02-28
  • 打赏
  • 举报
回复
假如要改成dataset,实现我函数里面的功能,有没有提议阿,谢谢
web_gus 2005-02-28
  • 打赏
  • 举报
回复
学习 速度快的datareader需要关闭:)
zxilu 2005-02-28
  • 打赏
  • 举报
回复

objDataReader 需要关闭,
caiyi000 2005-02-28
  • 打赏
  • 举报
回复
SqlDataReader快啊。如果你取的数据少的话。我一般都用SqlDataReader
brando_beat 2005-02-28
  • 打赏
  • 举报
回复
我还是改用dataset吧!!晕死
加载更多回复(23)

62,074

社区成员

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

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

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

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