【发布时间】:2012-04-02 12:40:21
【问题描述】:
认证考试中的问题:
您使用 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],但在我看来这没有意义,因为连接正在被打开并在“使用”块之后立即关闭。
有人能指出正确答案并解释原因吗?
谢谢!!!
【问题讨论】:
-
你是对的,一旦 using 块退出,D 将调用 ((IDisposable)conn).Dispose()。
-
原来的代码示例是不完整的,所以答案也是。这个想法是您将 using 语句插入 GetDataTable 方法,然后在该 using 语句中调用必要的 db 命令并返回数据表。您认为它没有意义的论点是无效的,因为假设数据访问代码将位于 using 语句的右大括号之前。
标签: c# ado.net data-access-layer