SqlCommand什么时候在另一个函数中使用时关闭?

Jar*_*rth 2 c# sql-server sqlcommand sqlconnection return-value

我在C#中有一个程序,我创建了各种类,所有这些都需要调用数据库.所以我决定创建一个静态类来处理所有调用,以便我可以非常轻松地应用深远的变化.在那个类中,我有调用SqlCommand(ExecuteReader()等等)各个部分的函数我最终厌倦了重写所有的连接代码,并将它抽象到另一个函数中getSqlCommand(),该函数只返回一个初始化的函数SqlCommand,用于执行各种命令.我选择不将其传递SqlCommand回其他程序(虽然它是一种公共方法,以防万一我需要它),因为如果你在将结果返回给程序之前我会做一些预处理.

我的问题是,如果/何时SqlConnection关闭?因为它作为a中的返回值被传回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;
    }
}
Run Code Online (Sandbox Code Playgroud)

静态类中命令用法的示例:

public static SqlDataReader executeReader( string query )
{
    try {
       return GetSqlCommand(query).ExecuteReader();
    } catch (SqlException) {
       //Notify User and Resolve Error
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)

usr*_*usr 5

SqlConnection当你打电话时,A 关闭Dispose.离开using区块就是这样.连接将被关闭.

这里的所有都是它的.它不会神奇地保持打开状态,因为ADO.NET不知道并且无法找到您返回的连接对象.

将连接移出GetSqlCommand方法.将连接对象传递给该方法.GetSqlCommand没有创建连接的业务.它应该连接,使用它,但不要关闭它.