【问题标题】:Reading Excel File with multiple worksheets into database将具有多个工作表的 Excel 文件读入数据库
【发布时间】:2018-07-25 05:35:21
【问题描述】:

我在这里很麻烦。我正在使用 exceldatareader 的数据集函数读取具有三个工作表的 excel 文件。阅读文件后,我有一个包含三个表的数据集,每个工作表一个。

现在我需要将这些数据逐行导出到两个不同的 sql 表中。这些表具有自动增量主键,表 A 的 PK 构成了 TableB 中的 FK。我正在使用带有 SCOPE_IDENTITY() 的存储过程来实现这一点。

excel 文件中的每一列都是存储过程中的一个变量,因此当我逐行迭代工作表时,我可以分配这些变量,然后通过存储过程发送它们。

现在的问题是如何遍历这个数据集并将每一行 [col] 分配给我的存储过程的变量。

感谢您的帮助。

更新更多信息:

1.Sheet 1 转到 sql 中的表 1
2.Sheet 2 转到 sql 中的表 2
3.Sheet 3 也转到 sql 中的表 2
4.表1与表2是一对多关系

【问题讨论】:

  • 你应该显示相关的有问题的代码
  • 我不知道在这里显示什么代码,因为我什至不知道从哪里开始。我正在玩 foreach 循环,但这并没有让我到任何地方
  • 三张表,两张sql表?第三个去哪儿了?
  • 第三张表将进入table2。我会把它添加到我的问题中。谢谢

标签: c#


【解决方案1】:

以下是一些半伪代码样板:

var datatable = dataset.Tables[0];
using(var proc = connection.CreateCommand(...))
{
    proc.Parameters.Add("@firstcolumnname", SqlDbType.Int);
    foreach(DataRow dr in datatable.Rows)
    {
        /* check for DbNull.Value if source column is nullable! */
        proc.Parameters["@firstcolumnname"].Value = dr["FirstColumnName"];

        proc.ExecuteNonQuery();
    }
}

但这只有在存储过程中进行一些数据处理时才有意义。否则,这需要批量插入,尤其是当您在 excel 表中有很多(数千)行时。

一对多关系(外键)可能很棘手,如果您可以控制插入的顺序,那么只需从“一”表开始,然后再加载“多”表。让存储过程匹配键值,如果它们不是 Excel 源数据的一部分。

如果您在并发多用户环境中,并且在加载时访问和写入表,则完全不同。然后您必须添加事务以在整个过程中保持引用完整性。

【讨论】:

  • 谢谢。我会玩这个并报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多