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

时间:2015-03-11 10:31:04

标签: c# ms-access ado.net ado

我有一个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等,但我想知道如何链接这两个数据库。

提前致谢 乔纳森

1 个答案:

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