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

什么是从C#获取sql数据的最佳方法

应俭
2023-03-14
问题内容

我试图通过C#中的代码找到最佳的(快速与最简单)访问SQL Server代码的方法

当我从书本上学习时,我遇到了很多建议,通常都建议我通过拖放来完成。但是,由于我想在代码中做到这一点,所以第一种方法是按列号获取数据,但是SQL
Query中的任何重新排序(如添加/删除列)都让我难以解决。

例如(别笑,有些代码大约有2年历史了),我什至编写了特殊的函数来传递sqlQueryResult并检查它是否为null):

public static void exampleByColumnNumber(string varValue) {

        string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2]

                                  FROM [Database].[dbo].[Table]
                  WHERE [SomeOtherColumn] = @varValue";
        SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
        sqlQuery.Prepare();
        sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);

        SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
        if (sqlQueryResult != null) {
            while (sqlQueryResult.Read()) {
                string var1 = Locale.checkForNullReturnString(sqlQueryResult, 0);
            string var2 = Locale.checkForNullReturnString(sqlQueryResult, 1);
            }
            sqlQueryResult.Close();
        }
    }

后来我发现可以通过列名(使用多列和许多变化的顺序来阅读似乎更容易):

    public static void exampleByColumnNames(string varValue) {

        string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2]

                                  FROM [Database].[dbo].[Table]
                  WHERE [SomeOtherColumn] = @varValue";
        SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
        sqlQuery.Prepare();
        sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);

        SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
        if (sqlQueryResult != null) {
            while (sqlQueryResult.Read()) {
                string var1 = (string) sqlQueryResult["SomeColumn"];
            string var2 = (string) sqlQueryResult["SomeColumn2"];
            }
            sqlQueryResult.Close();
        }
    }

第三个示例是通过按列名进行操作,但使用.ToString()来确保它不是空值,或者对空值检查执行If / else。

    public static void exampleByColumnNamesAgain(string varValue) {

        string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2], [SomeColumn3]

                                  FROM [Database].[dbo].[Table]
                  WHERE [SomeOtherColumn] = @varValue";
        SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
        sqlQuery.Prepare();
        sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);

        SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
        if (sqlQueryResult != null) {
            while (sqlQueryResult.Read()) {
                string var1 = (string) sqlQueryResult["SomeColumn"].ToString();
            DateTime var2;
        DateTime.TryParse(sqlQueryResult["SomeColumn2"].ToString());

        int varInt = ((int) sqlQueryResult["SomeColumn3"] == null ? 0 : (int) sqlQueryResult["SomeColumn3"];

            }
            sqlQueryResult.Close();
        }
    }

请记住,我只是为了这个示例而创建的,可能会有一些错别字或一些语法错误,但是主要的问题是哪种方法最好,哪一种是最差的(我知道第一种是我最不喜欢的)。

我很快将不得不开始/重写我的9万行小应用程序的某些部分,该应用程序至少已广泛使用了这3个示例,因此我想获得最佳的速度方法,最好是最容易维护的方法(希望这是相同的方法)。

可能有一些更好的选择,所以请分享?


问题答案:

看来您可能正在看旧书。如果要以“老式方式”进行操作,则至少应使用using块。概括:

using (var connection = new SqlConnection(connectionString))
{
    using (var command = new SqlCommand(commandString, connection))
    {
        using (var reader = command.ExecuteReader())
        {
             // Use the reader
        }
    }
}

更好的是,研究Entity Framework。

链接:数据开发人员中心



 类似资料:
  • 我是Cassandra的新手,我正在努力弄清楚如何存储数据,以便能够并行执行快速读取。我听说分区数据会给性能带来问题?是否可以并行读取同一分区中Cassandra表中的数据?

  • 问题内容: 简单的一个:如何在PHP中找到浮点数的小数部分?例如,如果我的值为1.25,我想返回0.25。 问题答案:

  • 问题内容: 为一个类获取类文字很容易: 但是,如何获取数组类型的类对象? 这可行,但是很丑陋,可能不是编译时间常数: 我查看了JLS,但唯一发现的是,根据JLS的定义,我所谓的“类文字”不是“文字”。 问题答案: 即使对于数组类型,您仍然可以使用类文字。这样编译就可以了。 JLS的15.8.2节规定: 甲 类文字 是由类,接口,的名称的表达 阵列 ,或原语类型或伪类型,接着是“” 和令牌。 (加粗

  • 问题内容: 我有一个600万行的SQLite表。 从表中删除是很慢的。 删除表然后重新创建它似乎更快。 我正在使用它进行数据库导入。 删除表会是更好的方法还是有办法快速删除所有数据? 问题答案: 一个很大的不同是DML和DDL。对于数据库事务,这非常重要。最后的结果可能是相同的,但是这些操作有很大的不同。 如果您只是要了解性能,那么可以删除并重新创建表。如果您需要在导入中进行事务处理,则必须注意,

  • 他们推荐这种结构,但我看不出他们在哪里讨论有效地获取所有数据。 每个聊天文档都有属性、成员集合和消息集合: null null Firestore查询很肤浅,有时可能很棒。我的理解是,没有一种根深蒂固的方法来查询深度和获取嵌套集合。那么,什么是最好的实践和最省事的方法来做到这一点呢? 目前,我正在检索快照并将其映射到带有ID的对象,并通过附加的查询和映射将嵌套的集合数据添加到父文档数据上,我对我的

  • 我试图找出使用PHP从一系列IP地址中获取单个/24 IP块的最佳/最有效的方法。 我有一个MySQL数据库中的IP地址范围(我不能改变这是如何呈现的),必须有单独的范围的 /24块保存,也以特定的方式(我不能改变MySQL条目,也不能改变软件如何处理列表)。 例如,我有各种范围的IPv4 IP地址在这种格式: 我需要将其保存为此特定格式,以表示给定地址范围内的每个/24块: 我对如何在不写非常复