1

我正在使用数组来保存 SQLite 查询的结果,目前我正在使用二维表来执行此操作。

我遇到的问题是,我必须在可以使用数组之前手动指定索引之一的大小,但这感觉像是一种浪费,因为我不知道将返回多少行。我确实使用了一个属性,该属性允许我检索在数组初始化中使用的列的数量。

例子:

using (SQLiteDataReader dr = cmd.ExecuteReader())
{
       results = new object[10,dr.FieldCount];

       while (dr.Read())
       {
            jIterator++;

            for (int i = 0; i < dr.FieldCount; i++)
            {
                    results[jIterator, i] = dr.GetValue(i);
            }
       }
}
//I know there are a few count bugs

示例存储:

数组内容

只要 while 循环返回 true,我只需将数据添加到数组中,在这种情况下,我将第一个索引设置为 10,因为我已经知道数据库中有多少元素,而 10 将绰绰有余。

我将如何更改数组以便它的大小可以是动态的,这甚至可能基于我获取数据库结果的方式吗?

4

5 回答 5

11

您不应该使用数组,而应该使用动态大小的容器,例如List<T>. 或者,更好的是,您可以使用 ADO.NET 之类的东西DataTable,因为这正是它旨在存储的内容,并且使用 aDbDataAdapter将避免IDataReader在整个地方重复相同的代码。

于 2011-03-04T17:08:16.993 回答
9

不要使用数组。使用通用列表System.Collections.Generic.List<type>,您甚至可以拥有一个列表的列表。这些是可调整大小的,并为您完成所有的管道工作。

于 2011-03-04T17:09:27.570 回答
4

我建议定义一个结构来保存您的联系信息,然后创建一个该类型的通用列表。它们可以无限扩展。

于 2011-03-04T17:09:50.947 回答
1

你有几个选择:

  • 使用 aList<T[]>而不是二维数组。
  • 将您的数据阅读器加载到数据集而不是数组中
  • 完全跳过数据读取器并使用数据适配器填充数据集
  • 使用迭代器块将 datareader 转换为 IEnumerable 而不是数组

其中,在大多数情况下,您最好的选择是最后一个;这意味着您不需要一次将整个查询结果集放在内存中,这是首先使用 SqlDataReader 的要点。

于 2011-03-04T17:12:18.547 回答
0

您可以在 C# 中创建动态数组。

int[] intarray;

尽管建议 List 的其他响应可能更合适。

于 2011-03-04T17:08:20.497 回答