我在C#中创建了一个程序,我创建了各种类,并且它们都需要调用数据库。所以我决定创建一个处理所有调用的静态类,以便我可以非常轻松地应用深远的变化。在这一类我有打电话的SqlCommand
(ExecuteReader()
等),我终于厌倦了重写所有的连接代码各部分功能,并抽象出来给叫getSqlCommand()
另一个函数会返回一个初始化SqlCommand
,我用它来执行各种命令。我选择不将SqlCommand
传回给其他程序(尽管它是一种公共方法,以防我需要它),因为如果在将结果返回到程序之前做了一些预处理。当在另一个函数中使用SqlCommand时什么时候关闭?
我的问题是,如果/在SqlConnection
关闭时?既然它被作为SqlCommand
的返回值传回,它是否会被打开?如果是这样,我可以关闭它吗?这里有一些代码(稍微剥离下来),所以你可以看到我在做什么,在此先感谢!
的函数来创建SqlCommand
:
public static SqlCommand GetSqlCommand(string query)
{
using (SqlConnection dbConnection = new SqlConnection(SQLConn)) {
dbConnection.Open();
SqlCommand cmd = new SqlCommand(query, dbConnection);
cmd.CommandTimeout = 0;
return cmd;
}
}
命令在静态类的使用的一个示例:
public static SqlDataReader executeReader(string query)
{
try {
return GetSqlCommand(query).ExecuteReader();
} catch (SqlException) {
//Notify User and Resolve Error
}
return null;
}
这难道不是错误?我会期望它错误,因为'SqlConnection.Dispose'通常会关闭。也许.NET的缓存连接正在节省您(.NET会缓存连接)。命令也应该在你完成之后处理掉。 – TyCobb 2014-12-03 17:36:36
当您的代码片段退出代码片段中的'using'块时,它会自动关闭,呈现以半无用状态返回的'SqlConnection'。 – Michael 2014-12-03 17:36:58