【问题标题】:Querying data from SQL从 SQL 查询数据
【发布时间】:2013-07-08 10:28:24
【问题描述】:

我需要从数据库中查询一个有 400 行和 24 列的表。我需要查询这张表以便在每一行,然后是每一列我可以执行一些 C# 代码(我可以使用列信息来执行一些代码)。

现在,我正在使用 select 语句一次又一次地从表中查询每一行,并将其存储到自定义列表并对其执行自定义操作。

这是最好和最快的方法吗?还是我应该一次查询整个表并存储在某个地方?不确定数据集中的哪个位置,然后运行 ​​throw custom code 以使用每行中的信息进行一些操作?

【问题讨论】:

  • 你总是需要全表数据吗?
  • 是的,这是我需要在实时服务器上运行的一次性应用程序
  • 最好将数据导出到 csv 或其他文件。然后使用循环,您可以遍历文件的每一行,然后您可以将行的每个元素分配给一个数组。像这样您可以处理..只是一个建议..

标签: c# asp.net sql performance


【解决方案1】:

您可以从数据库中获取表一次并将其存储在数据表中,然后只需使用 linq 来选择类似这样的列

var data = dt.AsEnumerable().Select(s => s.Field<string>("myColumnName")).ToArray<string>();

如果您不想在代码中的任何位置使用其他列,那么您应该从数据库中只选择有用的列。

您还可以使用 linq 选择数据库的多个列。这些值将存储在匿名类型的对象中。

var mutipleData = from row
                  in dt.AsEnumerable()
                  select new 
                  { Value1 = row["Column1"].ToString(), 
                    Value2 = row["Column2"].ToString() 
                  };

【讨论】:

    【解决方案2】:

    假设每个字段为 1000 字节,那么容纳 400 行的总内存为 9.6MB。花生!只需读取 DataTable 中的整个表并根据需要进行处理。

    【讨论】:

      【解决方案3】:
      • 从数据库表中选择您关心的所有记录
      • 将选择的记录复制到 DataTable 中。

      伪代码:

      --dt is datatable
      foreach(datarow dr in dt.rows)
      {
      --perform operation
      string str=dr["columnname"].tostring 
      }
      

      【讨论】:

        【解决方案4】:

        400 行并不是一个庞大的数量,但它取决于每列中的数据以及您可能运行查询的频率。如果您要做的只是运行查询并处理输出,请改用 DataReader。

        【讨论】:

          【解决方案5】:

          如果只有 400 条记录,我会一次性获取它们,将它们存储在一个类中并遍历每个实例。

          类似:

          public class MyTableClass(){
              string property1 {get; set;}
              string property2 {get; set;}
              int property3 {get; set;}
              // etc.
          }
          

          逻辑:

          ICollection<MyTableClass> lstMyTableClass = (
                          from m in db.mytableclass
                          select m
                      ).ToList();
                      return lstMyTableClass;
          

          然后是一个循环:

           foreach(var myTableInstance in lstMyTableClass){
          
                myTableInstance.DoMyStuff();   
           }
          

          【讨论】:

            【解决方案6】:

            如果记录数总是低于千,只需查询所有记录并将其保存在列表中。

            一旦数据在列表中,您可以使用 LINQ 查询列表 n 次,而无需针对每个请求访问数据库。

            【讨论】:

            • 这就是我现在正在做的事情:)
            • 您是否根据每列中的值进行计算?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-02-06
            • 2012-12-12
            • 2020-03-02
            • 2016-07-27
            • 2014-03-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多