C #: поддержка нескольких типов баз данных с помощью табличных адаптеров - PullRequest
0 голосов
/ 12 октября 2009

Вот сценарий:

Я хочу иметь возможность поддерживать базы данных SQL Server CE и SQL Server 200x, используя строго типизированный набор данных.

Проблема, которую я получаю, состоит в том, что она компилируется с использованием определенного типа соединения (SqlConnection или SqlCeConnection), поэтому я не могу изменить тип во время выполнения на любой объект IDbConnection.

Я слишком много спрашиваю из наборов данных, сгенерированных Visual Studio? Если нет, то какой трюк заставить его работать?

1 Ответ

1 голос
/ 13 октября 2009

Я давно отказался от использования созданных дизайнером адаптеров таблиц. Нет простого способа контролировать то, что они делают, нет простого способа изменить строку подключения для всех них ... и, конечно, нет способа заставить их работать с другим поставщиком ADO.NET, поскольку поставщик закодирован в сгенерированном коде. Адаптеры таблиц даже не наследуют общий базовый класс, поэтому вы можете написать общий код (ну, они наследуют от компонента, но это довольно бесполезно ...)

Вместо этого я использую свой собственный самодельный генератор TableAdapter. Он строит DbDataAdapter из запроса SELECT, используя DbCommandBuilder (на самом деле, запрос SELECT даже не является необходимым, поскольку он может быть выведен из структуры DataTable). Для более сложных DataTables, которые нуждаются в особой логике, я заставляю их реализовывать пользовательский IDataAdapterProvider, чтобы они могли предоставить свои собственные DbCommands.

...