当前位置: 代码迷 >> ASP.NET >> 关于try finally的有关问题
  详细解决方案

关于try finally的有关问题

热度:514   发布时间:2013-02-25 00:00:00.0
关于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 会自动关闭的。
  相关解决方案