在 C# 中链接两个访问数据库

Linking two access databases in C#

我有一个将连接到 2 个访问数据库的 c# winforms 应用程序。一个是我不会修改的报告数据库,另一个数据库是应用程序将在其中进行更新等的地方。将需要查询连接两个数据库中的表。我计划使用 OleDBConnection、OleDBDataReader 等来发出查询。但是,我无法弄清楚如何以编程方式 link 数据库,就像您通过 Access 本身可以做到的那样。 在 VB6\ActiveX 世界中,我会使用 ADODX 目录对象等在两个访问数据库之间创建一个 link,允许我查询一个数据库,就好像另一个数据库中的所有表都在其中一样。

但是,我不认为在 .net 应用程序中使用 ADODX 组件是个好主意,正如微软所说 "ADO and ADO MD have not been fully tested in a Microsoft .NET Framework environment. They may cause intermittent issues, especially in service-based applications or in multithreaded applications. The techniques that are discussed in this article should only be used as a temporary measure during migration to ADO.NET. " 参见 http://support.microsoft.com/kb/317881

所以,我正在寻找一种做类似事情但不使用旧 COM/ActiveX 东西的方法。我的目标是能够编写一个可以连接两个数据库上的表的查询。

谁能想出办法吗?我可以创建一个包含所有表的 DataSet 对象并以某种方式这样做吗?

我熟悉查询 Access 数据库、DML 等,但我想知道如何 link 这两个数据库。

提前致谢 乔纳森

如果您使用 System.Data.Odbc,那么您可以打开一个数据库的 OdbcConnection,并在使用 [;Database=...].[TableName] 的查询中引用另一个数据库中的 table,如下所示:

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";