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

标签 c# sql-server return-value sqlconnection sqlcommand

我有一个 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/

相关文章:

JavaScript:字符串匹配后返回 anchor 标记

c# - 静态类和方法实例

c# - 可以确定方法是由派生类调用还是直接作为自身调用? C#

c# - Bing Speech to Text API - 在 c# 中通过 websocket 进行通信

c# - 如何只锁定 .NET 事务中的相关行

c++ - 从函数中按值返回 - 为什么它有效?

c# - Microsoft Graph token 不包含任何权限,或者无法理解权限

mysql - 从 MS SQL 2014 到 MySQL 的数据库架构转换

sql - 从 SQL 表中删除重复行(基于多列中的值)

php - 忽略 PHP 函数的返回值有问题