认证考试的问题:
您使用Microsoft Visual Studio 2010和Microsoft .NET Framework 4来创建应用程序。 该应用程序包含以下代码段。 (行号仅供参考。)
01 class DataAccessLayer
02 {
03 private static string connString;
04
05 ...
06 public static DataTable GetDataTable(string command){
07
08 ...
09 }
10 }
您需要定义DataAccessLayer类的连接生命周期。您还需要确保应用程序使用与数据库的最小连接数。 你应该怎么做?
[A]在第04行插入以下代码段。
private static SqlConnection conn = new SqlConnection(connString);
public static void Open(){
conn.Open();
}
public static void Close(){
conn.Close();
}
[B]在第04行插入以下代码段。
private SqlConnection conn = new SqlConnection(connString);
public void Open(){
conn.Open();
}
public void Close(){
conn.Close();
}
[C]用以下代码段替换第01行。
class DataAccessLayer : IDisposable
将以下代码段插入第04行。
private SqlConnection conn = new SqlConnection(connString);
public void Open(){
conn.Open();
}
public void Dispose(){
conn.Close();
}
[D]在第07行插入以下代码段。
using (SqlConnection conn = new SqlConnection(connString)){
conn.Open();
}
有些人认为正确答案是[D],但从我的观点来看,这是没有意义的,因为连接正在打开并在“使用”块之后立即关闭。
有人能指出正确答案并解释原因吗?
感谢!!!
答案 0 :(得分:1)
没有正确答案。
注意:我不确定你是否在D中的.Open()调用之后没有放入数据访问代码。如果你认为要理解,那么D实际上是正确的答案。连接处理后,它将被释放回连接池。连接池将帮助您最小化打开的连接数。如果您需要逐字关闭连接,即使它们处于非活动状态,您也需要开始考虑配置连接池的使用。
答案 1 :(得分:0)
D实现using
关键字代码的范围部分,并将被隐瞒。
A,B,C仍然处于类/程序级别的生命周期中,因此每个实例都将跨越另一个连接。
答案 2 :(得分:0)
D是正确的。您只能使用一个连接。至少,你希望如此。 ADO.NET具有连接池功能,除非您使用解决方案A(一个静态分配的连接),否则无法确定发生了什么。
由于您应尽可能使用连接池,因此D仍然是正确的。