【问题标题】:Effectively join two tables from Oracle and SQL Server in C#在 C# 中有效地连接来自 Oracle 和 SQL Server 的两个表
【发布时间】:2013-06-21 12:40:28
【问题描述】:

所以我有两个系统,我经常必须将它们连接在一起才能显示某些报告。我有一个系统将元数据存储在存储在 SQL Server 中的文档上,通常按部件号。我想要获取文档的零件编号列表来自我们 ERP 系统中的 Oracle 表。我目前的方法是这样的:

  1. 将数据从 ERP (Oracle) 系统获取到 DataTable
  2. 从列中编译string[] 的部件号。
  3. 使用 IN() 语句将所有文档信息从 docs (MSSQLSVR) 系统获取到另一个 DataTable
  4. 向 ERP DataTable 添加列,循环遍历行。
  5. 从文档DataTableif(erpRow["ITEMNO"] == docRow["ITEMNO"]) 中填写文档信息

这对我来说真的是低效的。现在显然我不能使用一个连接字符串到JOIN 这两个表,或者使用数据库链接,所以我假设必须有两个调用,每个数据库一个。还有其他方法可以将这两个集合连接在一起吗?

【问题讨论】:

  • 将 ERP 数据加载到字典中 - 键入“零件编号”,每行作为值。然后将Docs信息查询到DataReader中,并使用linq循环遍历datareader,将字典中相关的ERP数据连接起来?
  • 所以不能使用“数据库链接”?这是否意味着您不能使用链接服务器 (msdn.microsoft.com/en-us/library/ms188279.aspx)?为什么不?这绝对是最好的解决方案。

标签: c# asp.net sql-server oracle datatable


【解决方案1】:

我建议采用 LikedServer 方法 (http://msdn.microsoft.com/en-us/library/ms188279.aspx)。在 SQL Server 端编写一个存储过程,从 Oracle 链接服务器中提取数据,在本地执行 JOIN 并返回组合数据。

SQL Server 旨在高效执行 JOIN。无需尝试在应用层重新创建该功能。

【讨论】:

【解决方案2】:

既然您排除了数据库链接,我会执行以下操作

  1. 将数据从 ERP (Oracle) 系统获取到数据表中。
  2. 通过 Table-Valued Parameter 将 DataTable 作为参数传递给 SQL Server
  3. 返回您的数据(没有循环更新旧数据集)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 2017-09-09
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多