如题。问题总结如下:
问题一: 不知道用哪个好?
问题二: 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
------解决方案--------------------------------------------------------