- 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 会自动关闭的。