2009-06-19 4 views
2

Nous avons besoin de l'application que nous construisons pour être indépendante de la base de données. En particulier, j'en ai besoin pour pouvoir travailler avec SQL Server, Oracle et MySQL. À l'avenir, d'autres fournisseurs de base de données seront éventuellement ajoutés à la liste. Bien sûr, quel que soit le DB à utiliser aura le même schéma..net: DataSet et TableAdapters sont-ils agnostiques de la base de données et du fournisseur?

Afin de construire un prototype pour démontrer l'interface, nous avons chargé le schéma dans une base de données SQL Server, puis généré le DataSet et TableAdapters pour cette base de données. Comme l'ensemble de données a été généré par une instance spécifique d'une base de données, je soupçonne que les DataSet et TableAdapters générés ne sont pas indépendants du fournisseur. En outre, je ne suis même pas sûr qu'ils puissent être utilisés pour une autre instance SQL Server DB.

Ma question est la suivante: Existe-t-il un moyen d'utiliser les mêmes DataSet et TableAdapters générés automatiquement avec différentes bases de données (et éventuellement des fournisseurs)?

Cheers,

Markos

Répondre

2

En général, si vous développez votre code de base de données par rapport à l'espace de noms System.Data.Common, il sera aussi agnostique que possible. Cependant, il existe de nombreuses mises en garde, car chaque fournisseur de base de données a ses propres détails de niveau d'implémentation qui diffèrent des autres.

Un exemple d'une approche de base de données agnostique en utilisant System.Data.Common ressemble à ceci:

var factory = DbProviderFactories.GetFactory("My Provider Name"); 
using (var connection = factory.CreateConnection()) 
{ 
    connection.ConnectionString = "My Connection String"; 
    connection.Open(); 

    var cmd = factory.CreateCommand(); 
    cmd.CommandText = "My Command Text"; 
    cmd.Connection = connection; 

    var adapter = factory.CreateDataAdapter(); 
    adapter.SelectCommand = cmd; 

    var dataset = new DataSet(); 
    adapter.Fill(dataset); 

    // ... 
} 

changer simplement la première ligne de changer de fournisseur de base de données et le reste du code peut assez bien rester le même.

Cette approche utilise beaucoup de codage manuel. Vous pouvez envisager d'utiliser un cadre de base de données comme NHibernate (comme mentionné par David Basarab), Subsonic ou Microsoft Enterprise Library Data Access Application Block pour en nommer quelques uns.

0

Je pense que vous êtes dirigé vers le mauvais chemin. Je voudrais aller avec NHibernate

Je l'utilise tous les jours et il est agnostique de base de données.

Questions connexes