【问题标题】:Linking two access databases in C#在 C# 中链接两个访问数据库
【发布时间】:2015-03-11 10:31:04
【问题描述】:

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

提前致谢 乔纳森

【问题讨论】:

  • 如果您正在处理少量数据,您可以将数据加载到 Lists/collections .net 并使用 LINQ 或表达式连接。或者有什么特别的理由要使用 JOIN?
  • 嗨,我明白你的意思了。虽然有些表可能有数千行,但一般数据量不会很高。我认为一些查询可以像这样完成,尽管我们历史上是一家 SQL 商店,所以其他开发人员会抱怨他们不理解 ;-)

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


【解决方案1】:

如果您使用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";

【讨论】:

  • 太好了,我不知道您可以在 Access 中进行类似的查询。实际上,如果我将我的问题表述为“如何在 Access 中连接不同数据库中的表”,我想我会在 Google 上找到这个 ;-)
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多