我只是想知道是否有一个很好的实现(在 C#/ASP.NET 中)关于如何同时从我的不同数据库访问我的记录。我有这个简单的应用程序,它假设在这些数据库上进行搜索,然后,如果某个关键字匹配,则显示记录。
我总共有 5 个数据库(目前使用 MySQL),并将在未来对其进行扩展(可能会更改为 SQL Server)。我完全了解如何在单个数据库上进行搜索,而我仍在学习如何在多个数据库中进行搜索。
有任何提示、意见或建议吗?
我只是想知道是否有一个很好的实现(在 C#/ASP.NET 中)关于如何同时从我的不同数据库访问我的记录。我有这个简单的应用程序,它假设在这些数据库上进行搜索,然后,如果某个关键字匹配,则显示记录。
我总共有 5 个数据库(目前使用 MySQL),并将在未来对其进行扩展(可能会更改为 SQL Server)。我完全了解如何在单个数据库上进行搜索,而我仍在学习如何在多个数据库中进行搜索。
有任何提示、意见或建议吗?
有多个 XXXConnection 实例(MysqlConnection 或其他)并遍历它们。
您将使用与使用不同连接字符串针对每个其他数据库搜索单个数据库相同的方法。这将是 .NET 4.0 或不久前推出的库的 3.5 版本中的并行扩展的一个很好的候选者。如果结果集有些相同,我还将研究DataTable.Merge方法的使用。
我不能说 MySQL,但在 SQL Server 中,您可以从多个数据库中进行选择(只要您连接的用户具有正确的权限)。如果所有数据库中的表都相似,那么您也许可以通过将结果联合在一起来在一个查询中执行此操作。因此,如果您有 3 个数据库(称为DB1
和)DB2
并且DB3
每个数据库都有一个称为的表,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%'
根据您是在应用程序的服务器端还是客户端执行查询,您可能会在服务器端采用以下方式:
[Server].[Database].[Schema].[Table]
在 SQL Server 中,表名可以以服务器名、数据库名和模式名作为前缀。如果您不想使用模式名称,但需要指定位于同一服务器上的数据库,则可以编写以下内容:
[Database]..[Table]
如果您更希望从客户端进行搜索,您可能希望使用Enterprise Library来简化可配置的命名连接字符串及其提供的抽象。
如果您希望获得性能,您可以简单地使用BackgroundWorker 。再说一次,那是在客户端。