我有一个c#winforms应用程序,它将连接到2个访问数据库。一个是我不会修改的报告数据库,另一个数据库是应用程序将进行更新等的地方。需要在两个数据库中连接表的查询。我打算使用OleDBConnection,OleDBDataReader等来发出查询。但是,我无法解决如何以编程方式链接数据库,就像您可以通过Access本身一样。 在VB6 \ ActiveX世界中,我会使用ADODX Catalog对象等来创建两个访问数据库之间的链接,允许我查询一个,就好像其他表中的所有表都在其中一样。
但是,我不认为在.net应用程序中使用ADODX组件是一个好主意,正如微软所说的那样,ADO和ADO MD尚未在Microsoft .NET Framework环境中进行全面测试。它们可能会导致间歇性问题,尤其是在基于服务的应用程序或多线程应用程序中。本文中讨论的技术仅应用作迁移到ADO.NET期间的临时措施。 "见http://support.microsoft.com/kb/317881
所以,我正在寻找的是一种类似的东西,但没有使用旧的COM / ActiveX的东西。我的目标是能够编写一个可以在两个数据库上连接表的查询。
任何人都可以想到一种方法吗?我可以创建一个包含所有表的DataSet对象,并以某种方式这样做吗?
我熟悉查询Access数据库,DML等,但我想知道如何链接这两个数据库。
提前致谢 乔纳森
答案 0 :(得分:2)
如果您使用System.Data.Odbc
,那么您可以打开OdbcConnection
到一个数据库并使用[;Database=...].[TableName]
查询查询中另一个数据库中的表,如下所示:
using (var cmd = new OdbcCommand())
{
// con is an open OdbcConnection to C:\Users\Public\Database1.accdb
cmd.Connection = con;
cmd.CommandText =
@"SELECT c.LastName, m.MonthName " +
@"FROM " +
@"[Clients] c " +
@"INNER JOIN " +
@"[;Database=C:\Users\Public\mdbTest.mdb].[Months] m " +
@"ON c.RenewalMonth = m.MonthID " +
@"WHERE c.ID = 2";