2010-04-30 71 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。再次,這是在客戶端。

相關問題