Изменить исходную базу данных созданного VS во время выполнения - PullRequest
0 голосов
/ 24 июня 2010

В этом вопросе и ответах обсуждается теория, а также методы достижения желаемого результата, поэтому я не хочу перефразировать эти предложения.Я пытаюсь убедиться, что в моем случае нет простого решения перед тем, как переписать все мои табличные адаптеры.

У меня есть относительно зрелый и сложный проект, использующий множество наборов данных, все разработанные с использованием VS, и доступ к нимбаза данных VistaDB (изначально это была SQLCE).По разным причинам я сейчас хочу сделать фактическую базу данных, к которой наборы данных привязаны, по выбору пользователя.Выбор базы данных конечного пользователя будет ограничен базами данных, которые все используют одни и те же команды SQL.

Я провел немало исследований, и несколько предполагаемых решений утверждают, что делают это, но углубляясь в глубину, они не меняютсятип базы данных - только это строка подключения или путь.

Кто-нибудь на самом деле достиг этого, и если да, то могли бы они, по крайней мере, рассказать мне теорию и в лучшем случае предоставить код, который они использовали.

Спасибо ...

1 Ответ

1 голос
/ 26 июня 2010

Вы можете использовать несколько механизмов баз данных, если реализуете свой собственный слой базы данных, используя интерфейсы IDbConnection, IDataReader, IDbCommand и IDbDataAdapter, а не классы ядра базы данных напрямую.

Этот подход описан в этой статье здесь: http://www.dotnetjohn.com/articles.aspx?articleid=244

Также обратите внимание, что при нацеливании на несколько ядер баз данных вы должны изменить свои операторы sql.Например, VistaDB и SQL Server принимают даты в одинарных кавычках ('2010-06-26'), а база данных Access принимает символ # (# 2010-06-26 #) для дат.

Это также можно сделатьв слое базы данных, используя функции для возврата следующих символов:

'Access DB Provider
Public Function GetDateSQLChar() As String Implements MyDataLayer.GetDateSQLChar
   Return "#"
End Function

и

'VistaDB Provider
Public Function GetDateSQLChar() As String Implements MyDataLayer.GetDateSQLChar
   Return "'"
End Function
...