在 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";
我有一个将连接到 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";