我有一个 C# 程序,我在其中创建了各种类,所有类都需要调用数据库。所以我决定创建一个静态类来处理所有调用,以便我可以非常轻松地应用影响深远的更改。在那个类中,我有调用 SqlCommand
各个部分的函数(ExecuteReader()
等)我终于厌倦了重写所有连接代码,并将其抽象出来另一个名为 getSqlCommand()
的函数只返回一个初始化的 SqlCommand
,我用它来执行各种命令。我选择不将 SqlCommand
传递回其他程序(尽管它是一个公共(public)方法,以防万一我需要它)因为如果你愿意的话,我可能会在我之前做一些预处理将结果返回给程序。
我的问题是,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
时关闭。退出 using
block 就可以做到这一点。连接将关闭。
这就是它的全部。它不会神奇地保持打开状态,因为 ADO.NET 不知道也无法发现您返回了连接对象。
将连接移出 GetSqlCommand
方法。将连接对象传递给该方法。 GetSqlCommand
与创建连接无关。它应该建立连接,使用它,但不要关闭它。
关于c# - SqlCommand 在另一个函数中使用时什么时候关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27278017/