【问题标题】:Splitting a dataset in to datatables将数据集拆分为数据表
【发布时间】:2012-10-24 01:34:26
【问题描述】:

我有一个我正在“尝试”维护和升级的软件系统。我没有接受过正式的 c# 培训,只有 1 类 sql。我的大部分有限经验是使用 Java、C++。我们使用的是 MSSQL 2005。

我在 c# 中运行了一个查询,它获取一个包含 1 个表和 15 个左右列的数据集。每次运行时返回的行数都不同。第一列是 storeid。我需要通过 storeid 将记录分隔到他们自己的数据表中。一旦我知道了,就有一种将其发送到 CSV 文件的现有方法。

到目前为止,我已经找到了 Datatable.Select,按 storeid 排序。

一种选择是从数据集中提取所有唯一的 storeid 并将它们放入一个数组中。然后我可以根据现有的 storeid 进行查询,并使用 foreach 将这些行复制或移动到新的数据表中。

如果有人能指出我正确的方向,那将不胜感激。

标记

【问题讨论】:

  • 在你的问题中很难找到你的问题。
  • 我需要根据第一列中的值将数据集拆分为表格。

标签: c# sql sql-server-2005 dataset


【解决方案1】:
if you know number of tables you can use this methode..

            DataSet ds = new DataSet();
            DataTable dt1 = new DataTable();
            DataTable dt2 = new DataTable();
                dt1 = ds.Tables[0];
                dt2 = ds.Tables[1];

【讨论】:

  • 在数据集中只有一个数据表,如果我不清楚,对不起。从该数据表中,我想根据 storeid 拆分记录。所以一个数据表将包含所有 storeid 00001,另一个将包含 storeid 00004 的所有记录。
【解决方案2】:

当然有几种方法可以做到这一点,但这样的事情应该可以工作:

        DataSet dsMain = GetMyMainDataSet();
        DataSet dsTablesById = new DataSet();

        foreach (DataRow row in dsMain.Tables[0].Rows)
        {
            string storeId = row["storeid"].ToString();
            if (!dsTablesById.Tables.Contains(storeId))
            {
                dsTablesById.Tables.Add(storeId);
                foreach (DataColumn col in dsMain.Tables[0].Columns)
                {
                    dsTablesById.Tables[storeId].Columns.Add(col.ColumnName, col.DataType);
                }
            }
            dsTablesById.Tables[storeId].Rows.Add(row.ItemArray);
            dsTablesById.Tables[storeId].AcceptChanges();
        }

dsTablesById 将包含您的所有数据表,每个数据表都由您的不同 storeid 值命名。

【讨论】:

  • 看起来这会起作用。克隆数据表不是更容易吗,我认为克隆会复制原始结构而没有数据。
  • 当然,这将是完成上述部分答案的另一种方式。那将取代内部的foreach。只需确保您保留一种方法来识别哪个数据表属于哪个 storeid(取决于您决定如何收集数据表/数据集与字典等)。
  • 我正在使用数据集的提取方式,该代码是很久以前编写的。我正在努力使我的更新尽可能简单(并且可能会延长)。
【解决方案3】:

按 storeid 对查询进行排序,然后在代码中循环数据表,并在每次 storeid 更改时创建一个新表。您还可以使用 LINQ 将其复制过来或手动进行。

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    相关资源
    最近更新 更多