将数据集插入DataTable

时间:2011-01-20 00:18:17

标签: c# sql datatable dataset

我现在陷入了下面的问题。我会尽力解释它,但如果你需要更多澄清,请告诉我。我在google电子表格中添加了一些内容以帮助解释,链接如下。

https://spreadsheets.google.com/ccc?key=0An70K3Q_IiWAdGpfV2YzNFQ4aTYxTWIxSUd5azVMWEE&hl=en&authkey=CMO898QP

电子表格:
MainTable = C#Application DataTable
Data = SQL查询(数据集)中的SQL结果

需要将数据电子表格翻译/转换为MainTable电子表格中指定的格式。

每个rowid都在那里,因为它们与独特的东西有关。所以举个例子。如果我们假设rowid 1是“本月的总销售额”,您可以在数据电子表格中看到,单元格C2需要转到MainTable电子表格上的单元格E2。

如果我们假设rowid 2用于“货架上的库存”,您可以在数据电子表格中看到,单元格D3需要转到MainTable电子表格上的单元格F3。

......等等。我首先使用下面的代码来处理它,但这不会起作用,因为prodcode在我的数据集中不是唯一的。我会创建另一个数据集或列表,但后来我不确定从那里去哪里。我看错了吗?

foreach (DataRow dsrow in dsproduct.Tables["loadUniqueProducts"].Rows)
        {
            string prodcode = Convert.ToString(dsrow["prodcode"]);

            for (int i = 1; i <= 14; i++)
            {
                row = table.NewRow();
                row["rowid"] = i;
                row["prodcode"] = prodcode;
                table.Rows.Add(row);
            }
        }

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

相当令人困惑的问题; DataSet,DataTable和电子表格都是不同的东西。您的电子表格中的loadUniqueProducts表格是Data吗?这是一个DataTable,而不是DataSet。

电子表格是有序的并且有空行,并且与数据表格相比更类似于C#数组; DataTables不应该有空行。

rowid是一个非常糟糕的DataColumn名称,它通常用于引用数据库中的顺序行ID。 prodcode没有在任何地方描述,是您的“PRODUCT”数据之后的数字吗?

为什么要添加14个空白行?您应该只将具有数据的行添加到DataTable。然后,对loadUniqueProducts中的每一行再次执行此操作。大量重复数据。

我假设您想要做的是逐步浏览loadUniqueProducts中的每一行,并在MainTable中找到匹配的行。如果此行尚不存在,请创建它。然后找出“uniqueProducts”具有值的MainTable列,并复制它们。听起来不错吗?

以下是针对Total Sales(RowID = 1)执行此操作的示例代码。我没有为Stock on Shelves或任何其他专栏做过这个,但这应该给你一个想法:

foreach (DataRow r in dsproduct.Tables["loadUniqueProducts"].Rows)
{
    int productID = r.Field<System.Int32>("ProductID");
    string productExpression = "ProductID=" + productID.ToString();
    string salesExpression = productExpression + " AND RowID=1";

    int? monthSales = r.Field<System.Int32?>("MonthSales");
    if ((monthSales.HasValue) && (monthSales.Value > 0))
    {
        DataTable destTable= dsproduct.Tables["MainTable"];
        DataRow[] selectedRows = destTable.Select(salesExpression);
        DataRow destRow;
        if (selectedRows.Length > 1)
            throw new Exception(String.Format("MainTable has ProductID {0} duplicate Sales RowID 1.", productID));
        else if (selectedRows.Length == 1)
            destRow = selectedRows[0];
        else
        {
            destRow = destTable.NewRow();
            destRow.SetField<System.Int32>("RowID", 1);
            destRow.SetField<System.Int32>("ProductID", productID);
            destTable.Rows.Add(destRow);
        }

        string locColumn = "Loc" + r.Field<System.Char>("Loc");
        destRow.SetField<System.Int32>(locColumn, monthSales.Value);
    }

这应该被修复以避免在运行时创建列名,并且创建强命名的DataTables将摆脱<System.Int32>的东西,但这应该让你开始。