2010-04-30 52 views
0

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

我喜欢5个数据库(目前使用MySQL),并且将来会扩展它(可能会更改为SQL Server)。我完全知道如何在单个数据库上进行搜索,而我仍然在学习如何在多个数据库中进行搜索。

任何提示,意见或建议?

+1

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

回答

1

我不能说MySQL,但在SQL服务器中,您可以选择多个数据库(只要您连接的用户具有正确的权限)。如果这些表在所有数据库中都相似,那么您可以通过将结果联合在一起来在一个查询中完成此操作。所以,如果你有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%' 
+0

除非您使用链接服务器,否则数据库还必须位于同一台服务器上。 – Thomas 2010-04-30 16:41:13

1

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

1

您可以使用相同的方法使用不同的连接字符串来针对每个其他数据库搜索单个数据库。这对于.NET 4.0中的并行扩展或早些时候推出的3.5版本库来说是一个很好的选择。如果结果集有些相同,我还会调查DataTable.Merge方法的使用。

1

根据您是否在的服务器或客户端执行你的查询应用程序,你可能会去在服务器端通过以下方式:

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

在SQL Server中,表名可以由服务器名称,数据库名称和架构名称作为前缀。如果你不想使用模式名,但你需要指定它是在同一台服务器上的数据库,你可以写:

[Database]..[Table] 

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

如果您希望获得更好的表现,您可以简单地使用BackgroundWorker。再次,这是在客户端。