在 C# 中将单个列查询到数组或集合中

本文关键字:数组 集合 单个列 查询 | 更新日期: 2023-09-27 18:36:59

如何在 C# 中将结果从 SQL 查询移动到数组或集合中?

我的 SQL 查询(从 mytable 的"姓氏"列中选择具有非空值的姓氏值):

SELECT LastName FROM mytable WHERE LastName IS NOT NULL

这是我之前执行的代码,用于使用该列生成新的数据集:

string connectionString = @"Data Source='/path-to-datatable/ASTS.sdf';";
string strSql = "SELECT LastName FROM mytable WHERE LastName IS NOT NULL";
SqlCeConnection mConnection = new SqlCeConnection(connectionString);
SqlCeCommand mCommand = new SqlCeCommand(strSql, mConnection);
PartNumberDataSet = new MyDataBase();
// Read all rows from the table into a dataset
SqlCeDataAdapter PNadapter = new SqlCeDataAdapter(mCommand);
PNadapter.Fill(PartNumberDataSet, "mytable ");

但是,我想尽量减少必须存储在内存中的数据量(该表中有很多 20 列左右)。如何将此查询保存到某个数组或集合中?我只需要姓氏值。

在 C# 中将单个列查询到数组或集合中

数据集和数据适配器可能是,也可能不是矫枉过正。你真的必须问问自己是否需要数据集(即你是否将其传递给旨在与DataSet一起使用的API)。如果你确实需要它,那么可能几乎没有动力去尝试做任何事情(除非你剖析并确定它太重了)。

但是,如果您不需要数据集,并且只需要从数据库中获取姓氏或其他数据的列表,则可以使用 SqlCeDataReader 从数据库中读取结果集并填充集合。

使用 while 循环读取每条记录并从数据读取器中提取姓氏。对于每个姓氏,将其添加到集合中。

类似于以下内容的内容应该有效:

 List<string> lastNames = new List<string>();
 using(SqlCeDataReader dr = mCommand.ExecuteReader())
 {
     while(dr.Read())
     {
         string lastName = (string)dr["LastName"];
         lastNames.Add(lastName);
     }
 }