ADO.NET способ создания связанной таблицы - PullRequest
4 голосов
/ 18 сентября 2011

Я пишу приложение, которое использует ADO.NET OLEDB провайдера. База данных - это доступ. Большая часть взаимодействия с БД осуществляется через SQL-запросы DDL / DML.

Теперь мне нужно создать связанные таблицы, и, кажется, не существует способа сделать это только с ADO.NET. Ни в простом запросе DDL, ни в попытках напрямую манипулировать системными таблицами Access.

Я пытаюсь избежать использования ADOX, с дополнительной ссылкой / зависимостью в моем приложении. Кто-нибудь знает способ обойти это? Очень ценится.

Вот как я сейчас создаю связанные таблицы с помощью ADOX.

using ADOX;

public static void CreateLinkedTable(string sourceDB, string sourceTable, string targetDB, string targetTable)
{
   Catalog cat = new Catalog();
   cat.let_ActiveConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + targetDB);
   Table table = new Table();
   table.Name = targetTable;
   table.let_ParentCatalog(cat);
   table.Properties["Jet OLEDB:Create Link"].Value = true;
   table.Properties["Jet OLEDB:Link Datasource"].Value = sourceDB;
   table.Properties["Jet OLEDB:Remote Table Name"].Value = sourceTable;
   cat.Tables.Append(table);
}

1 Ответ

3 голосов
/ 11 октября 2011

Нет способа обойти дополнительную зависимость. Связанные таблицы - это особенность MS ACCESS, и ADO.NET не знает, как делать то, что вы хотите. Access должен был бы раскрыть это с помощью SQL-команд, которые он принимает, а это не так, он представлен в той же степени, что и с помощью VBA. Таким образом, вы можете управлять им изнутри БД Access, но не извне - из соединения ADO.NET, все, что вы можете сделать, это выдать операторы SQL, которые он знает, как их интерпретировать.

...