紧急求助!!!使用数据访问组件返回DataReader,但没有关闭数据库连接,怎么处理???在线等!!!UP有分

srz007 2005-03-24 11:49:57
在我的项目中使用了
GotDotNet.ApplicationBlocks.Data
这个数据访问组件,通过这个组件返回了很多的IDataReader类型的数据,例如
public class Data
{
private string cn = null;
private string assembly = null;
private string type = null;
private string conType = null;

public Data()
{
conType = ConfigurationSettings.AppSettings["HelperType"].ToLower();
assembly = ConfigurationSettings.AppSettings["HelperAssembly"];
cn = ConfigurationSettings.AppSettings["ConnectionString"];
type = "GotDotNet.ApplicationBlocks.Data." + ConfigurationSettings.AppSettings["HelperType"];
ah=AdoHelper.CreateHelper(assembly, type);
}


public IDataReader GetList()
{
AdoHelper ah = GetAdoHelper();

string strSql = "SELECT * FROM Table";

return ah.ExecuteReader(cn,CommandType.Text,strSql);;
}
}

然后我在程序中直接这样使用


Data data = new Data();
IDataReader = data.GetList();
//下面就是些使用这个IDataReader 循环处理的语句了
............



但整个这个过程下来我并没有把这个IDataReader 绑定到任何控件上,按msdn上的说法好象不绑定的话就不会释放返回这个IDataReader 时产生的数据库连接,现在的现象是直接导致我的连接池很容易就被占满了,所以我急需要一个好的解决办法,再尽量少的改动下能把数据库连接及时关闭掉

该怎么办啊??????????
...全文
451 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuqinglq 2005-07-04
  • 打赏
  • 举报
回复
做个标记
3tzjq 2005-03-28
  • 打赏
  • 举报
回复
DataReader的关闭连接的方法上面大虾们都讲得很清楚了。
如果你是只想读取数据表中的某些行,就用DataReader,如果还需要于数据进行交互,那么则需要使用DataSet和DataAdapter
fanweiwei 2005-03-28
  • 打赏
  • 举报
回复
UP
fanweiwei 2005-03-28
  • 打赏
  • 举报
回复
同意
fanweiwei 2005-03-28
  • 打赏
  • 举报
回复
nnd
我也被MS的那篇文章篇了,做了个试验:

string cs = "Data Source=(local)\\NETSDK;Initial Catalog=Northwind;Integrated Security=SSPI";
SqlConnection conn = new SqlConnection(cs);
conn.Open();
SqlCommand command = new SqlCommand("select * from products",conn);
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
reader.Read();
reader.Close();
Console.WriteLine(conn.State);
conn.Close();
Console.ReadLine();

输出Closed,这说明连接确实被关闭了
再查了下AdoHelper的源码,到处都是CommandBehavior.CloseConnection
楼主,关闭了DataReader就行了,连接会跟着关闭
xjxb21 2005-03-28
  • 打赏
  • 举报
回复
up~~~~~~~~~~~~~~~~~~
simon0220 2005-03-25
  • 打赏
  • 举报
回复
dispose
vzxq 2005-03-25
  • 打赏
  • 举报
回复
Hehe
netDust_cv 2005-03-25
  • 打赏
  • 举报
回复
不会吧?还有没有权威了??
wjcking 2005-03-25
  • 打赏
  • 举报
回复
mk
srz007 2005-03-24
  • 打赏
  • 举报
回复
to hackate(~兰心*-*寒~ | 个人网站: http://www.7to.net)

关键是在哪写close()?
open()是在数据访问组件中的,但又不能在组件中close()
等到调用返回的DataReader的时候还怎么close()?
hackate 2005-03-24
  • 打赏
  • 举报
回复
你用过就close不行么?,反正每次调用都OPEN,调用后都CLOSE,不成么?
fds2003 2005-03-24
  • 打赏
  • 举报
回复
UP
srz007 2005-03-24
  • 打赏
  • 举报
回复
to flyskywlh(~.NET 2% 一场雨~)
释放DATAREADER是不会释放数据库连接的

to amendajing(学习,是个漫长的旅途!)
打开数据库连接的操作是在那个组件里完成的,我总不能去改那个组件啊,再说就是改的话也不行啊,如果直接在组件里关闭了连接就不能返回DATAREADER了
amendajing 2005-03-24
  • 打赏
  • 举报
回复
你写方法关闭呀!取用后就关闭
flyskywlh 2005-03-24
  • 打赏
  • 举报
回复
在用完DATAREADER里,直接释放不行么??

MARK
reddeephehe 2005-03-24
  • 打赏
  • 举报
回复
mark
srz007 2005-03-24
  • 打赏
  • 举报
回复
呵呵,非常感谢Sunmast(速马|AIR SUPPLY!) 的测试,原来msdn也会有错啊,怕怕
baobei7758 2005-03-24
  • 打赏
  • 举报
回复
..
srz007 2005-03-24
  • 打赏
  • 举报
回复
to Sunmast(速马|AIR SUPPLY!)
谢谢斑竹的解答,看来我还是改成返回DataSet吧
加载更多回复(21)

62,046

社区成员

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

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

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

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