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

新手请教 : 到底是用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

------解决方案--------------------