图片的提示就是“超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小”
知道是某个数据没关闭,可是我在很多地方加了close还是不行 有些地方加了会提示检测到无法访问代码,鼠标移到ExecuteReader会提示System.InvalidOperationException System.Data.SqlClient.SqlException异常的信息。
代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public class dataOperate
{
public SqlConnection con;
public dataOperate()
{
}
public bool execSQL(string sql)
{
SqlConnection con = createCon();
con.Open();
SqlCommand com = new SqlCommand(sql, con);
try
{
com.ExecuteNonQuery();
con.Close();
}
catch (Exception e)
{
con.Close();
return false;
}
return true;
}
public int seleSQL(string sql)
{
SqlConnection con = createCon();
con.Open();
SqlCommand com = new SqlCommand(sql, con);
try
{
return Convert.ToInt32(com.ExecuteScalar());
}
catch (Exception e)
{
CloseDB();
return 0;
}
}
public DataSet getDataset(string sql, string table)
{
using (SqlConnection con = createCon())
{
con.Open();
DataSet ds;
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
ds = new DataSet();
sda.Fill(ds, table);
return ds;
}
}
public SqlDataReader ExceRead(string sql)
{
SqlConnection con = createCon();
con.Open();
SqlCommand com = new SqlCommand(sql, con);
SqlDataReader read = com.ExecuteReader();
return read;
}
public SqlConnection createCon()
{
con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ToString());
return con;
}
public void CloseDB()
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
}
我在web.configl里加了个
<connectionStrings>
<add name="ConStr" connectionString="server=.;database=wz;uid=sa;pwd=;" />
</connectionStrings>
如果在这里加个Max Pool Size=512 这样治标不治本而且会损坏系统性能 请问有什么好的方法吗
你上面的代码是不是调用的sqlhelper?你的系统是一开始就报错还是,运行一段时间后报错?
没有调用sqlhelper 运行一会儿后报错 直接在asp.net下运行都可以的 只有在IIS里运行的时候 会出错
@Coral_修: 那就是因为你用了 SqlDataReader这个函数,这里跟你简单说下,因为要下班了, SqlDataReader你把这个想成是服务器的指针,你用完了,没有释放,占用资源多了,就报错了。如果你项目不大的话,用dataset或是是用model层来映射。如果你不想改代码的话,那需要修改一下web.config里面的链接语句,但是这个事牺牲服务器的性能来换取你的网站的运行。具体代码你百度一下sqlhelper 什么类的。我以前配到过,就半天报错!
@唯吴独尊: 我在每段代码 标有close的后面加了个 System.GC.Collect(); 就可以运行了
你这代码写的太差了,根本就没法改,因为看不出你到底为什么要这样做。
呃....
@Coral_修:那你有没有正常的代码啊
LZ最好能在finally中close()或者直接使用using关键字。还有用了using 就不需要close了。代码太乱了。建议楼主看一看,《代码整洁之道》之类的书籍。
没有调用sqlhelper 运行一会儿后报错 直接在asp.net下运行都可以的 只有在IIS里运行的时候 会出错
代码稍微修改了一下
图挂了,
你的SqlDataReader 没有dispose,不满才怪。
你的数据库的操作,没有一个try catch finally。肯定不行的
图片不能显示,麻烦上传一下图片
图片的提示就是:超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小