2010-06-24 8 views
0

This question and answers discuss la théorie ainsi que des méthodes pour atteindre le résultat souhaité, donc je ne souhaite pas re-hachage ces suggestions. J'essaie de m'assurer qu'il n'y a pas de solution facile dans mon cas avant de réécrire tous mes tableadapteurs. Ce que j'ai, c'est un projet relativement mature et complexe utilisant de nombreux jeux de données tous conçus avec VS et accédant à une base de données VistaDB (c'était à l'origine SQLCE). Pour diverses raisons, je souhaite maintenant rendre la base de données réelle que l'ensemble de données est lié à l'utilisateur sélectionnable. La sélection de la base de données de l'utilisateur final sera limitée aux bases de données qui utilisent toutes les mêmes commandes SQL. J'ai fait pas mal de recherches et plusieurs supposées solutions prétendent le faire, mais en cherchant plus loin, elles ne changent pas le type de base de données - seulement c'est la chaîne de connexion ou le chemin.Modifier la base de données source de la base de données créée VS à l'exécution

Est-ce que n'importe qui a réellement atteint ceci et si oui pourrait-ils s'il vous plaît au moins me dire la théorie et au mieux fournir le code qu'ils ont employé.

Merci ...

Répondre

1

Vous pouvez cibler les moteurs de base de données multiples si vous implémentez votre propre couche de base de données en utilisant les interfaces IDbConnection, IDataReader, IDbCommand et IDbDataAdapter et pas les classes du moteur de base de données directement.

Cette approche est décrite dans cet article ici: http://www.dotnetjohn.com/articles.aspx?articleid=244

Notez également que lors du ciblage des moteurs de base de données multiples, vous devez modifier vos instructions SQL. Par exemple, VistaDB et SQL Server acceptent les dates entre guillemets simples ('2010-06-26') tandis que la base de données Access accepte le symbole # (# 2010-06-26 #) pour les dates.

Cela peut aussi être fait dans votre couche de base de données en utilisant les fonctions de retourner ces caractères:

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

et

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