日期:2014-05-17  浏览次数:20370 次

关于try finally的问题
C# code

public static SqlConnection CreateCon()
        {
            
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
            return con;
        }

public static SqlDataReader getRow(string sql)
        {
            SqlConnection con = CreateCon();
            try
            {
                con.Open();
                SqlCommand com = new SqlCommand(sql, con);
                SqlDataReader sdr = com.ExecuteReader();
                return sdr;
            }
            catch (Exception ex)
            {
                Logs.FileLog( sql + " | " + ex);
                throw;
            }
            finally
            {
                con.Close();
                con.Dispose();
            }
        }




请问的代码这样写有问题吗? finally里的关闭连接会每次都执行吗? 在做测试的时候数据连接会不断增加,导致系统挂掉了

------解决方案--------------------
1. 写dispose就根本用不着写close,那是画蛇添足的。
2. 写using(){ } 结构语法就行了,用不着写try..finally。那也是让你的代码臃肿而累赘的。
3. 连接池是高效利用连接的手段,不是每次都及时关闭连接,会使得系统根本经不起并发使用。

至于你说的“系统挂掉了”,应该去测试出真正的原因。不要随便按一个罪名。
------解决方案--------------------
 
代码全部错误。

静态 SqlConnection 就是大问题。

ExecuteReader 也用错了,没有设置为关闭阅读器自动关闭数据库连接。

设置以后调用这个方法的地方,负责关闭Reader就可以了,SqlConnection 会自动关闭的。