当前位置: 代码迷 >> ASP.NET >> 新手请问 : 到底是用TryCatch好还是Using好
  详细解决方案

新手请问 : 到底是用TryCatch好还是Using好

热度:6294   发布时间:2013-02-25 00:00:00.0
新手请教 : 到底是用TryCatch好还是Using好?
如题。问题总结如下:
问题一: 不知道用哪个好?
问题二: using里面可以加上Try...Catch吗?
问题三: 在Finally里要不要加上连接的Dispose()方法呢?
 
两个方法的代码我都写了,如下:  

方法一: 使用TryCatchFinally:
C# code
                    //方法一: 使用TryCatchFinally            public static List<ClassA> GetListTryCatch()            {                List<ClassA> list = new List<ClassA>();                string queryString = @"select * from tableA";                                OracleConnection connection = null;                                try                {                    connection = new OracleConnection(connectionString);                    OracleCommand command = new OracleCommand();                    command.Connection = connection;                    command.CommandText = queryString;                    connection.Open();                    OracleDataReader reader = cmd.ExecuteReader();                    while (reader.Read())                    {                        ClassA ca = new ClassA();                        ca.ItemName = reader.GetString(0);                        ca.TargetValue = reader.GetDouble(1);                        list.Add(ca);                    }                                    }                catch (Exception)                {                    throw;                }                finally                {                    connection.Close();                    // connection.Dispose();  // 不知道要不要加这句                }                                                return list;            }


方法二: 使用Using:
C# code
            //方法二: 使用Using            public static List<ClassA> GetListUsing()            {                List<ClassA> list = new List<ClassA>();                string queryString = @"select * from tableA";                // use using                using (OracleConnection connection = new OracleConnection(connectionString))                {                    OracleCommand command = new OracleCommand(queryString, connection);                    connection.Open();                    using (OracleDataReader reader = command.ExecuteReader())                    {                        // Always call Read before accessing data.                        while (reader.Read())                        {                            ClassA ca = new ClassA();                            ca.ItemName = reader.GetString(0);                            ca.TargetValue = reader.GetDouble(1);                            list.Add(ca);                        }                    }                }                return list;            }



------解决方案--------------------------------------------------------
// connection.Dispose(); // 不知道要不要加这句
在建立一个连接后默认会创建相应的连接池。你确认你以后不会再用到与此相同的连接就可以用此语句

而如果你还会用同样的连接操作时不应用此语句。影响性能


一般情况用using,但有的情况不得不手动开关
------解决方案--------------------------------------------------------
我喜欢using,少写几个字符
------解决方案--------------------------------------------------------
using里面也是需要try的,只是他代替了finally的左右而以
------解决方案--------------------------------------------------------
using语句,定义一个范围,在范围结束时处理对象。
场景:
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
例如:
C# code
using (Class1 cls1 = new Class1(), cls2 = new Class1()){  // the code using cls1, cls2} // call the Dispose on cls1 and cls2
------解决方案--------------------------------------------------------
  相关解决方案