首页 新闻 会员 周边 捐助

如何解决Sql数据库连接不能正常关闭?

0
悬赏园豆:20 [已解决问题] 解决于 2012-08-27 09:33

我的项目是 asp.net的,数据库底层使用Sql,但是在网站发布后使用using(.....){.....}或者connection.Close()这种方法关闭数据库连接往往关不掉,很容易网站就因连接池超限而瘫痪,这是为什么呢?有什么好的解决方法呢!?

问题补充:

public static int GetScalar(string sql)
{
SqlConnection connection = new SqlConnection(GetConnection.GetSqlConnection());
connection.Open();
using (SqlCommand cmd = new SqlCommand(sql, connection))
{
return Convert.ToInt32(cmd.ExecuteScalar());
}
connection.Close();
}

杨斐_Feil的主页 杨斐_Feil | 初学一级 | 园豆:178
提问于:2012-08-26 10:26
< >
分享
最佳答案
1
using(SqlConnection connection = new SqlConnection(GetConnection.GetSqlConnection())){
   try{
.....
   }finally{
     connection.close()
   }
}
收获园豆:15
向往-SONG | 老鸟四级 |园豆:4853 | 2012-08-26 12:07

嗯  这样看起来  比较完美

杨斐_Feil | 园豆:178 (初学一级) | 2012-08-27 09:32
其他回答(3)
0

贴代码出来,不大可能关不掉吧,是不是你异常处理的时候跳出了关闭的步骤?

收获园豆:5
八戒的师傅 | 园豆:1472 (小虾三级) | 2012-08-26 10:36

我加到问题补充里了,这是别人写的代码,现在网站经常出现连接池超限从而导致网站瘫痪,我在异常记录日志里看到的"连接池超限"的反馈.

支持(0) 反对(0) 杨斐_Feil | 园豆:178 (初学一级) | 2012-08-26 10:50

呃    是不是代码在connection.Close();之前 已经 return了,所以没有执行到吧

支持(0) 反对(0) 杨斐_Feil | 园豆:178 (初学一级) | 2012-08-26 10:58

@枭雄吃馒头: 

应该是这样的,你可以按楼下“向上-SONG”的方式处理。

支持(0) 反对(0) kasoo | 园豆:91 (初学一级) | 2012-08-26 13:13

@枭雄吃馒头: 直接return了,连接并没有关闭啊,哪个脑残写的代码拖出去打

支持(0) 反对(0) 八戒的师傅 | 园豆:1472 (小虾三级) | 2012-08-26 15:55

@八戒的师傅: 还真是出现问题了才注意到这居然这么写的   太可怕了

支持(0) 反对(0) 杨斐_Feil | 园豆:178 (初学一级) | 2012-08-27 09:34
0
using (SqlCommand cmd = new SqlCommand(sql, connection))
{
     returnConvert.ToInt32(cmd.ExecuteScalar()); //这行就return了,下面的那行connection.Close()压根不会被执行
} 
connection.Close();//注意这行不会被执行,,,

你应该使用using将SqlConnetion包裹起来执行,,,而不是仅仅包裹SqlCommond而不包裹SqlConnetion。。。。

using(SqlConnection connection = new SqlConnection(GetConnection.GetSqlConnection())){
   try{
.....
   }finally{
     connection.close()
   }
}
土豆屋 | 园豆:354 (菜鸟二级) | 2012-08-27 02:40
0
public static int GetScalar(string sql)
{
    using(SqlConnection connection = new SqlConnection(GetConnection.GetSqlConnection()))
    {
        connection.Open();
        using (SqlCommand cmd = new SqlCommand(sql, connection))
        {
            return Convert.ToInt32(cmd.ExecuteScalar());
        }        
    }
}

用两个using 就可以了  不需要手工去关闭连接

gunsmoke | 园豆:3592 (老鸟四级) | 2012-08-27 05:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册