2008-10-10 7 views
1

Ex.Existe-t-il des classes (ou méthodes) pouvant créer une chaîne de connexion formatée, compte tenu du nom du fournisseur et de l'ID utilisateur, du mot de passe, etc.?

ConnectionDetails cd = new ConnectionDetails(); 
cd.ProviderName = "System.Data.OleDb"; 
cd.DataSource = "serverAddress"; 
cd.Catalog = "database"; 
cd.UserId = "userId"; 
cd.Password = "password"; 

string connectionString = cs.CreateConnectionString(); 
// Should return: 
// "Provider=SQLOLEDB;Data Source=serverAddress;Initial Catalog=database;User Id=userId;Password=password;" 

j'écrire ma propre classe, mais je ne suis pas sûr de savoir comment récupérer une propriété de fournisseur de chaîne de connexion (SQLOLEDB dans cet exemple) à partir d'un programme nom du fournisseur db invariant (System.Data.OleDb).

Edit:

Vous pouvez faire un

DbProviderFactories.GetFactory("System.Data.OleDB").CreateConnectionStringBuilder() 

Mais le DbConnectionStringBuilder qui est retourné ne sait toujours pas c'est la propriété du fournisseur de chaîne de connexion, même si, dans ce cas, il la classe dérivée a une " Fournisseur "propriété.

+0

Merci pour le pointeur vers le DbProviderFactories.GetFactory C'est ce que je cherchais. – DanO

Répondre

2

La chose la plus proche que je connaisse est DbConnectionStringBuilder. Comme les propriétés requises par différents fournisseurs varient, il utilise un tableau associatif (collection de valeurs de nom) plutôt que des propriétés fixes.

Ainsi, votre exemple ressemblerait

DbConnectionStringBuilder csb = new DbConnectionStringBuilder(); 
csb["ProviderName"] = "System.Data.OleDb"; 
csb["DataSource"] = "serverAddress"; 
csb["Catalog"] = "database"; 
csb["UserId"] = "userId"; 
csb["Password"] = "password"; 

string connectionString = csb.ConnectionString; 
+0

Cela ne fonctionne pas. Dans une chaîne de connexion OleDB, la propriété du fournisseur est 'Provider = SQLOLEDB'. C'est essentiellement mon problème. J'ai besoin de savoir comment obtenir la propriété du fournisseur de chaîne de connexion à partir du nom du fournisseur invariant. – ilitirit

0

Il y a une classe OleDbConnectionStringBuilder qui va créer la chaîne de connexion pour vous. Mais il semble que vous essayez de l'obtenir pour générer le nom du fournisseur pour vous, et je ne pense pas que cela fonctionne vraiment de cette façon. Puisque le nom du fournisseur peut varier, c'est quelque chose que vous devrez fournir pour indiquer à la connexion ce qu'il faut faire. Quel que soit le mécanisme que vous utilisez pour sélectionner votre connexion à la base de données (ou pour piloter vos méthodes de fabrique de connexions à la base de données si vous suivez cette route), il faudra également fournir le nom du fournisseur.