将未知数量的 rows/columns 保存到字符串列表中

Saving unknown number of rows/columns into a string list

我是 C# 的新手,所以请多多包涵。我有一个 class FixData:

private class FixData
{
    public int ID { get; set; }
    public List<string> content { get; set; }
}

还有private List<FixData> IDList = new List<FixData>();

我正在使用已存储在 IDListSqlDataReader 中的 ID 从 sql 数据库中查询数据,然后尝试将其保存到 IDList.content 中。但这就是困难部分的开始。我真的不知道这些数据有多少行或列,并且试图从调试器中读取它让我更加困惑(换句话说:我无法读取它)。尽管如此,我还是尝试以多种方式和多次保存它,以至于此时我完全迷失了方向。这是代码:

foreach (var record in IDList)
{
    SqlCommand nonQuerycmd = new SqlCommand(NonQuery, connection);
    nonQuerycmd.Parameters.Add(new SqlParameter("ScenarioID", record.ID));
    nonQuerycmd.ExecuteNonQuery();
    SqlCommand cmd = new SqlCommand(FixQuery, connection);
    sqlreader = cmd.ExecuteReader();
    ArrayList rowList = new ArrayList();
    while (sqlreader.Read())
    {
        object[] values = new object[sqlreader.FieldCount];
        sqlreader.GetValues(values);
        rowList.Add(values);
        record.content = values.Cast<object>().Select(x => x.ToString()).ToList();
    }
    sqlreader.Close();
}

能否请您帮我指出一个解释或 link 或其他可以帮助我理解我应该如何解决这个问题的东西?

编辑

我已经设法打乱了一些东西,但我不确定这是否按预期工作。

查看 the MSDN documentation SqlDataReader class。它应该可以帮助您入门。

链接到那里的示例和其他 classes 应该有助于正确使用 SqlCommand 和其他 classes。

在不知道你的 table 里有什么的情况下,我能做的最好的事情是:

if (read.Read())
        {
            for(int i = 0; i < read.FieldCount; i++)
            {
                record.content.Add(Convert.ToString(read[i]));
            }

        }

这会将每个选定的字段作为字符串添加到 record.content。我只是将 "while" 更改为 "if" 因为你只会处理一行(我认为)。如果您需要更多帮助,请让我们了解有关您的数据和您需要什么的更多信息。如果出于某种原因,您要放置多行的多个字段,请使用 while。如果您只想要多行中的一个字段,请将 if 更改为 while,取出 for/next 并将 [i] 更改为 [0]。香农不是伟大的卡纳克。