2015-03-11 2 views
1

У меня есть приложение winforms C#, которое будет подключаться к 2 базам данных доступа. Одна из них - это база данных отчетов, в которую я не буду вносить изменения, а другая база данных - это приложение, которое будет делать обновления и т. Д. Будут нужны запросы, которые объединяют таблицы в двух базах данных. Я планирую использовать OleDBConnection, OleDBDataReader и т. Д. Для выпуска запросов. Тем не менее, я не могу понять, как программно связывать базы данных, как вы могли бы сделать через сам доступ. В мире VB6 \ ActiveX я бы использовал объект ADODX Catalog и т. Д., Чтобы создать связь между двумя базами данных доступа, позволяя мне запросить его, как если бы все таблицы из другого были в нем.Связывание двух баз данных доступа в C#

Однако, я не думаю, что использование ADODX-компонента в приложении .net - такая хорошая идея, как Microsoft заявляет, что «ADO и ADO MD не были полностью протестированы в среде Microsoft .NET Framework. Они могут вызывать периодические проблемы , особенно в приложениях, основанных на обслуживании, или в многопоточных приложениях. Методы, которые обсуждаются в этой статье, должны использоваться только как временная мера во время миграции на ADO.NET ». см. http://support.microsoft.com/kb/317881

Итак, я ищу способ сделать аналогичную вещь, но без использования старых материалов COM/ActiveX. Моя цель - написать один запрос, который может объединять таблицы в обеих базах данных.

Может кто-нибудь подумать, если это можно сделать? Могу ли я создать объект DataSet, содержащий все таблицы, и сделать это так?

Я знаком с запросами баз данных Access, DML и т. Д., Но я хочу знать, как связать две базы данных.

Заранее спасибо Jonathan

+0

Если вы имеют дело с низким количеством данных, вы можете загрузить данные в списки/коллекции .net и присоединиться к LINQ или выражению. Или есть какая-то конкретная причина использовать JOIN? –

+0

Привет, я вижу вашу точку зрения. В общем случае объемы данных не будут высокими, хотя в некоторых таблицах могут быть тысячи строк. Я думаю, что некоторые запросы можно сделать так, хотя мы исторически являемся магазином SQL, поэтому другие разработчики будут стонать, они не понимают ;-) –

ответ

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

Thats excellent Я не знал, что вы можете делать такие запросы в Access. На самом деле, если бы я сформулировал свой вопрос как «как вы присоединяетесь к таблицам в разных базах данных в Access», я бы нашел это в Google ;-) –

Смежные вопросы