c# - 跨多个数据库的交叉引用

标签 c# sql sql-server ms-access ado.net

我有两个数据库,一个是 MS Access 文件,另一个是 SQL Server 数据库。我需要创建一个 SELECT 命令,根据 Access 数据库中的数据从 SQL Server 数据库中过滤数据。使用 ADO.NET 实现此目的的最佳方法是什么?

我可以从每个数据库中提取所需的数据到两个新表中吗?将它们放在一个数据集中。然后在 Dataset 上执行另一个 SELECT 命令以合并数据?

附加信息: Access 数据库不是永久的。要使用的 Access 文件由用户在运行时设置。

这里有一些背景信息来解释为什么有两个数据库。我的公司使用 CAD 程序设计建筑物。该程序将 CAD 模型中使用的 Material 存储在 Access 数据库中。每个模型有一个文件。我正在编写一个程序,该程序将为每个模型生成成本核算信息。这是基于存储在 SQL Server 数据库中的当前 Material 价格。


我的解决方案

我最终只是将 Access 数据库中的数据导入到 SQL 服务器数据库中的临时表中。执行所有必要的处理,然后删除临时表。这不是一个很好的解决方案,但它确实有效。

最佳答案

如果您不必这样做,您不希望将两个数据集都拉过来。您在实现 Tomalak 的解决方案时也会遇到麻烦,因为文件位置可能会更改,甚至服务器本身可能无法随时使用。

我的猜测是您的用户设置了一个 Access 数据库,其中包含人员/产品或他们有兴趣使用的任何内容,这就是您需要在两个数据库之间进行选择的原因。如果是这种情况,Access 表可能小于 SQL Server 表。最好的办法是提取 Access 数据,然后使用它来生成对 SQL Server 的过滤查询,这样您就可以最大限度地减少通过网络发送的数据。

所以,最重要的事情是:

  1. 过滤服务器上的数据,这样您就可以最大限度地减少网络流量,而且因为数据库在过滤方面比 ADO.NET 更快
  2. 如果您必须选择一个数据集来导入您的应用程序,请导入较小的数据集,然后使用它来过滤另一个表。

关于c# - 跨多个数据库的交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/240013/

相关文章:

MySQL 加入查询 GROUP BY

php - mssql_connect() : Unable to connect to server (without freetds. session )

sql - MS SQL - 计算字段中单词的出现次数

c# - WindowStartupLocation ="CenterScreen"时是否可以将窗口位置偏移一个值?

c# - Dapper UpdateAsync 忽略列

c# - Directory.GetFiles 不返回任何文件......有时

sql-server - 如何从两列中按值获取行限制

c# - 准确地从直接 Alpha 转换为预乘 Alpha 并返回

sql - 如何创建表的子集

sql - SQLite,识别空的非空单元格