【问题标题】:Looking for a good implementation that will access multiple databases simultaneously寻找一个可以同时访问多个数据库的好实现
【发布时间】:2010-04-30 14:25:12
【问题描述】:

我只是想知道是否有一个很好的实现(在 C#/ASP.NET 中)关于如何同时从我的不同数据库访问我的记录。我有一个简单的应用程序,它假设在这些数据库上进行搜索,然后,如果某个关键字匹配,则显示记录。

我总共有 5 个数据库(目前使用 MySQL),并将在未来对其进行扩展(可能会更改为 SQL Server)。我完全了解如何在单个数据库上进行搜索,而我仍在学习如何在多个数据库中进行搜索。

任何提示、cmets 或建议?

【问题讨论】:

  • 选项 1:MySQL 中的链接服务器。我不会推荐那个。但我肯定会尝试使用 Microsoft Data Application Block 并使用 MSDTC 进行多重连接,然后将结果合并到我的 C# 代码中。

标签: c# .net search multiple-databases


【解决方案1】:

我不能说 MySQL,但在 SQL Server 中,您可以从多个数据库中进行选择(只要您连接的用户具有正确的权限)。如果所有数据库中的表都相似,那么您也许可以通过将结果联合在一起在一个查询中执行此操作。因此,如果您有 3 个数据库(称为 DB1DB2DB3)并且每个数据库都有一个名为 Records 的表,那么您可以这样做:

SELECT * FROM DB1.dbo.Records WHERE Name Like '%searchterm%'
UNION
SELECT * FROM DB2.dbo.Records WHERE Name Like '%searchterm%'
UNION
SELECT * FROM DB3.dbo.Records WHERE Name Like '%searchterm%'

【讨论】:

  • 除非您使用链接服务器,否则数据库也必须位于同一服务器上。
【解决方案2】:

拥有多个 XXXConnection 实例(MysqlConnection 或其他)并遍历它们。

【讨论】:

    【解决方案3】:

    您将使用与使用不同连接字符串针对每个其他数据库搜索单个数据库相同的方法。这将是 .NET 4.0 或不久前推出的库的 3.5 版本中的并行扩展的一个很好的候选者。如果结果集有些相同,我还将研究DataTable.Merge 方法的使用。

    【讨论】:

      【解决方案4】:

      根据您是在应用程序的服务器端还是客户端执行查询,您可能会在服务器端采用以下方式:

      [Server].[Database].[Schema].[Table]
      

      在 SQL Server 中,表名可以以服务器名、数据库名和模式名作为前缀。如果您不想使用架构名称,但需要指定位于同一服务器上的数据库,则可以编写以下内容:

      [Database]..[Table]
      

      如果您更希望从客户端进行搜索,您可能希望使用Enterprise Library 来简化可配置的命名连接字符串及其提供的抽象。

      如果您希望提高性能,您可以简单地使用BackgroundWorker。再说一次,那是在客户端。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-19
        • 1970-01-01
        • 2011-02-01
        • 2016-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多