黑马程序员技术交流社区

标题: 数据库连接的资源释放 [打印本页]

作者: 周大俊    时间: 2011-11-2 23:10
标题: 数据库连接的资源释放
两种方式,using 和try\finally,通常我会使用前者,但同时有不少人选择后者,两者有木有什么差异呢?
作者: 10642491    时间: 2011-11-2 23:53
本帖最后由 10642491 于 2011-11-2 23:54 编辑

用MSIL来看真正的底层代码,就可以看到Using本身实际就是try...catch....finally,喜欢using是因为能少写几个代码呵呵
作者: 郑文    时间: 2011-11-3 02:04
    看上去表面using减少了代码 其实using 是自动生成try finnly 如果 ADO.NET中的对象有多个对象的时候 using生成的try finnly会嵌套 ,生成多个try finnlly. 有多少个对象就有几个try finally .如果自己使用try finally,就用一个就够了.  而且using只能用于实现IDispose的对象 ,而try finally任何对象都行都能。 实际上对于ado.net的那些和数据库连接有关的对象,用using 和 try finally都一样 取决于个人习惯问题.

作者: 黄朝辉    时间: 2011-11-3 08:39
using 主要是实现了IDispose接口,用完后马上释放。
作者: 周大俊    时间: 2011-11-3 09:40
soga,学习了,3Q!不过我也用Reflector看,嘿嘿
作者: xiaobai198611    时间: 2011-11-3 09:53
1.确保释放数据库连接资源的两种方式如下:
   a.使用try...catch...finally语句块,在finally块中关闭连接;
   b.使用using语句块,无论如何退出,都会自动关闭连接;
2.最好的方法是组合使用以上两种方式。
代码如下:
  1. using System;   
  2. using System.Data.SqlClient;   
  3.    
  4. namespace Magci.Test.DataAccess   
  5. {   
  6.     class Program   
  7.      {   
  8.         static void Main(string[] args)   
  9.          {   
  10.             string source = @"server=xiaobai\sqlexpress; integrated security=SSPI; database=msdb";   
  11.              SqlConnection conn = null;   
  12.             //使用try块处理   
  13.             try   
  14.              {   
  15.                  conn = new SqlConnection(source);   
  16.                  conn.Open();   
  17.                 //Do something   
  18.              }   
  19.             catch (Exception e)   
  20.              {   
  21.                 //Do something with the exception   
  22.              }   
  23.             finally   
  24.              {   
  25.                  conn.Close();   
  26.              }   
  27.    
  28.             //使用using块处理   
  29.             using (conn = new SqlConnection(source))   
  30.              {   
  31.                  conn.Open();   
  32.                 //Do something   
  33.              }   
  34.    
  35.             //两种组合方式   
  36.             try   
  37.              {   
  38.                 using (conn = new SqlConnection(source))   
  39.                  {   
  40.                      conn.Open();   
  41.                     //Do something   
  42.                      conn.Close();   
  43.                  }   
  44.              }   
  45.             catch (Exception e)   
  46.              {   
  47.                 //Do something with the exception   
  48.              }   
  49.          }   
  50.      }   
  51. }   
复制代码

作者: 沙铁健    时间: 2011-11-3 10:19
看个人喜好  我就是比较喜欢用using了     直观上来讲是一样的了  但是细看 就不一样了 ...呵呵




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2