当前位置: 首页 > 面试题库 >

在C#和SQL Server中嵌套使用的用法

孙思源
2023-03-14
问题内容

我已经注意到resharper让我可以定义使用方式而无需像下面的方法那样打开任何开/关括号(但是如果以后没有括号,那以后我就不能再使用定义的vars了,其他情况下就不能使用确切的括号了)下面定义使用):

public static string sqlGetDatabaseRows() {
        string varRows = "";
        const string preparedCommand = @"
                    SELECT SUM(row_count) AS 'Rows'
                    FROM sys.dm_db_partition_stats
                    WHERE index_id IN (0,1)
                    AND OBJECTPROPERTY([object_id], 'IsMsShipped') = 0;";
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP))
        using (var sqlQuery = new SqlCommand(preparedCommand, varConnection))
        using (var sqlQueryResult = sqlQuery.ExecuteReader())
            if (sqlQueryResult != null) {
                while (sqlQueryResult.Read()) {
                    varRows = sqlQueryResult["Rows"].ToString();
                }
                sqlQueryResult.Close();
            }
        return varRows;
    }

好吗?还是我应该像这样使用它?

public static string sqlGetDatabaseRows() {
        string varRows = "";
        const string preparedCommand = @"
                    SELECT SUM(row_count) AS 'Rows'
                    FROM sys.dm_db_partition_stats
                    WHERE index_id IN (0,1)
                    AND OBJECTPROPERTY([object_id], 'IsMsShipped') = 0;";
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) {
            using (var sqlQuery = new SqlCommand(preparedCommand, varConnection))
            using (var sqlQueryResult = sqlQuery.ExecuteReader())
                if (sqlQueryResult != null) {
                    while (sqlQueryResult.Read()) {
                        varRows = sqlQueryResult["Rows"].ToString();
                    }
                    sqlQueryResult.Close();
                }
            varConnection.Close();
        }
        return varRows;
    }

sqlConnectOneTime看起来像这样:

    public static SqlConnection sqlConnectOneTime(string varSqlConnectionDetails) {
        SqlConnection sqlConnection = new SqlConnection(varSqlConnectionDetails);
        sqlConnect(sqlConnection);
        if (sqlConnection.State == ConnectionState.Open) {
            return sqlConnection;
        }
        return null;
    }

我的问题是:

  1. 我应该使用varConnection.Close()和sqlQueryResult.Close()关闭varConnection吗?到底?(但这会强制使用方括号),或者使用完成后连接会自行关闭。

  2. 我应该检查varConnection的NULL是因为它有可能会返回null(另一方面,resharper在这里没有抱怨)。

  3. 我可以使用一些更好的方法来定义sqlConnectOneTime吗?就像当连接无法打开时,它应该返回ConnectionState.Closed而不是null?

还要注意,由于我正在使用线程,因此每次执行新的查询/更新/插入操作时,我都会打开新的连接,这是我当时最能想到的最聪明的主意。随意提出更好的建议:-)

我要问所有这些问题,因为我想更好地理解整个过程并停止犯一些愚蠢的错误,所以请对我温柔些。

疯狂的男孩

编辑:修改了问题,如果使用varConnection.Close()和sqlQueryResult.Close()是否必要。


问题答案:
  1. Close()由Dispose()方法调用,因此,只要您正确使用“使用”,就无需显式调用Close()。
  2. 如果有可能返回NULL,则应检查它。我建议,如果您控制获取sql连接的代码,则强烈建议您抛出异常,而不是返回NULL。否则,其他开发人员可能会遇到同样的问题。在我看来,无法打开所需的SQL连接似乎是一个有效的例外情况。如有必要,在开发人员希望避免异常处理时,您始终可以包含TryConnectOneTime。

另外,还有另一个样式说明-
我建议您适当地使用using语句,以防万一添加多余的行并发生意外错误。在样式方面,当我同时有多个语句时,我通常不倾向于缩进使用语句,但这全都取决于个人喜好。



 类似资料:
  • 我试图在脚本分数中使用嵌套值,但我在使它工作时遇到了问题,因为我无法通过doc访问它来迭代字段。此外,当我尝试在Kibana中像< code > _ type:images AND _ exists _:colors 一样查询它时,它不会匹配任何文档,即使当我单独查看所有文档时,该字段都清楚地出现在它们中。不过,我可以使用参数来访问它。_source,但是我看过可以慢一点慢一点,真的不推荐。 我知

  • 我被困在将嵌套JS与宇宙数据库核心SQL API集成上。我知道有一个用于 Cosmos DB 的模块(https://github.com/nestjs/azure-database),但我需要数据架构来支持嵌套的 json,如下所示: 我认为@nestjs/azure-database不支持这一点(或者我可能错了),因为当我检查他们的示例和quickstart时,没有这样的json模式的示例。

  • 问题内容: 按钮1位于更新面板之外,当用户在上传框中添加文件时运行的javascript是这样的: 问题很简单。 FileUpload1.HasFile ==否。我不知道为什么会这样,但是当我将其放在更新面板中时,它将停止工作。 我已经看到了其他一些线程。但是他们都没有回答为什么会发生这种情况,他们只是指向您可以下载的内容。 编辑:确实,我想要这样做的主要原因是,我可以获取一个..Uploadin

  • 问题内容: 在我的应用程序中,有多个步骤,其中将通过多种方法对数据库进行多次提交。例: A呼叫B,再呼叫C。然后B呼叫D。D呼叫E,依此类推。所有这些方法都有一些数据库操作。据我了解(声明式事务管理- 春天推荐的方式),如果 E* 成功完成,则事务(以及 E中的 操作将被提交)。现在,由于某些例外, F 应该导致回滚。我想 从 A 做起的 所有事情都 回滚。是否可以通过声明式事务管理?还是应该使用

  • 本文向大家介绍JavaScript中的函数嵌套使用,包括了JavaScript中的函数嵌套使用的使用技巧和注意事项,需要的朋友参考一下  在JavaScript1.2之前,函数定义是只允许在顶层全局代码,但1.2的JavaScript可以嵌套函数定义其他函数中也是可以的。 仍然存在的函数定义可以循环或条件之内不会出现限制。在函数定义这些限制只适用于函数声明与函数语句。 函数文本(在JavaScri

  • 本文向大家介绍C ++中的数组嵌套,包括了C ++中的数组嵌套的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个长度为N的零索引数组A,其中包含从0到N-1的所有整数。我们必须找到并返回集合S的最长长度,其中S [i] = {A [i],A [A [i]],A [A [A [i []]],...}以下规则。现在考虑S中的第一个元素以索引= i的元素A [i]的选择开始,S中的下一个元素应为A