请教一个关于静态SqlConnection的问题
大家好,在SqlHelper里面加了一个属性:public static SqlConnection DefaultConnection
{
get
{
if (string.IsNullOrEmpty(connstr)) { connstr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=123;"; }
return new SqlConnection(connstr);
}
}
网站中需要用到连接的都是这样写的:
using(SqlConnection conn=SqlHelper.DefaultConnection){
}
目前网站有时出现:超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
多次查询了项目,所有连接都有关闭了,现在请教下大家,是不是因为写成静态属性的原因呢?
这样写只是方便调用,但属性里面确实是返回的一个新的连接对象 new SqlConnection(connstr),不是很明白底层的原理,请教高手指点下。谢谢! --------------------编程问答-------------------- 你虽然定义静态属性了,但是每次调用其实都是重新new SqlConnection(connstr); --------------------编程问答-------------------- 实质还是每次都动态创建一个SqlConnection --------------------编程问答--------------------
楼上大哥的意思是并不是这个写法导致这种错误的出现吗?请问以前的连接对象在using 后有没有释放掉呢? --------------------编程问答--------------------
静态类里先new SqlConnection()
最后再return 会好点? --------------------编程问答-------------------- using里你保证在最后conn.Close了就可以了,释放using会替你释放 --------------------编程问答--------------------
用了using 就不用管conn.close()了吧,我在SqlHelper都加了这样一些方法,麻烦帮我看下有没有问题:
public static SqlDataReader ReturnReader(CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
using (SqlConnection conn = DefaultConnection)
{
return ExecuteReader(conn, cmdType, cmdText, cmdParms);//直接调用微软SqlHelper的方法
}
} --------------------编程问答-------------------- using只管给Dispose()
Close()需要你手动写 --------------------编程问答-------------------- 要手动close掉吧,如果有这样的话,一般是不会出现超时,连接池满的问题吧 --------------------编程问答-------------------- 不知道各位大神sqlconnection是用完一次就close还是怎么处理 --------------------编程问答--------------------
一直认为使用using会先close之后dispose --------------------编程问答--------------------
反正我是用完就关闭的 --------------------编程问答-------------------- private static SqlConnection conn = null;
/// <summary>
/// 获取连接字符串
/// </summary>
private static string ConnectionString
{
get
{
string _conn = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString.ToString();
return _conn;
}
}
/// <summary>
/// 返回SqlConnection数据连接对象实例
/// </summary>
public static SqlConnection Conn
{
get
{
string sqlconn = ConnectionString;
if (conn == null)
{
conn = new SqlConnection(sqlconn);
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Closed)
{ conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
return conn;
}
}
补充:.NET技术 , ASP.NET