OpenSqlConnection();
OleDbCommand cmd = new OleDbCommand(p_sSqlString, l_sqlConnection);
ddr = cmd.ExecuteReader(CommandBehavior.CloseConnection);用asp.net + access做了个网站,出现上传资料后,大约2个小时左右后,在正常页面上会出问题,就是上面代码第2行会表明连接是没有打开的,而出现问题。上传过程后,会关闭连接。连接是写到一个单独的类里面。这个类的实例是各个页面类的私有成员。上传页面和显示页面不是一个页面。按理连接也是不该相互影响的,但是现实确实出现上传资料后,大约两个小时会出现上面代码第2行会表明连接是没有打开的情况。
求助啊。分不多,见谅。
OleDbCommand cmd = new OleDbCommand(p_sSqlString, l_sqlConnection);
ddr = cmd.ExecuteReader(CommandBehavior.CloseConnection);用asp.net + access做了个网站,出现上传资料后,大约2个小时左右后,在正常页面上会出问题,就是上面代码第2行会表明连接是没有打开的,而出现问题。上传过程后,会关闭连接。连接是写到一个单独的类里面。这个类的实例是各个页面类的私有成员。上传页面和显示页面不是一个页面。按理连接也是不该相互影响的,但是现实确实出现上传资料后,大约两个小时会出现上面代码第2行会表明连接是没有打开的情况。
求助啊。分不多,见谅。
try
{
l_sqlConnection.Open();
}
catch
{
}
l_sqlConnection就是一个连接。在类里是这么声明的
private OleDbConnection l_sqlConnection = new OleDbConnection();
private string l_sSqlconnectionString = ConfigurationManager.AppSettings["ConnectionString"];
你可以调试下。你读完文件后就关闭了,但你是不是还在做其他操作。
我估计是这个CommandBehavior.CloseConnection的问题
你试试在使用reader以后,自己控制关闭连接try
{
excuteReader();
}
finally
{
conn.close();
}
你取得了这个ddr,然后一行一行读的时候,conn要保持连接。
这个CommandBehavior.CloseConnection可以智能到知道你什么时候用完了这个ddr了,然后关闭连接吗?
2.尽量少用datareader,虽然某些高手会告诉你dataTable内部也用了datareader,但是他一遍快速扫描完了就立刻断开了。如果你自己的代码,在处理复杂的玩意的时候没有立刻释放conn,那么情况就悲剧了,比如某些级联查询,第一个datareader在循环的同时,又在不断的根据条件开启其他的dr,尤其是为了省事公用了同一个conn,那线程池就占用严重了所以静态,datareader不是可以用,而是你的自己明确的知道怎么控制才不出问题的情况下可以用,所以对于一般人我倒是建议datatable比较健壮
{
con.open();
leDbCommand cmd = new OleDbCommand(p_sSqlString, con);
}反正一般要释放con和reader
特别是reader
麻烦,还难看。但是毛病没了。
个人猜测,是对asp.net的机理还是没搞懂。不像一般程序,从哪开始,命名空间、类怎么影响都很清楚。asp.net之间类的实例之间会有什么,不完全清楚。