2009-06-06 3 views
1

Je ne suis probablement pas le premier à faire face à ce problème, mais je n'ai pas trouvé de réponse appropriée nulle part.Pourquoi la portée d'un paramètre ConnectionString est-elle toujours forcée à "Application"?

J'ai une application Windows Forms qui utilise un DataSet fortement typé. Le concepteur utilise une chaîne de connexion définie dans les paramètres de l'application. Le problème est que ce paramètre est défini en tant que portée d'application (donc en lecture seule), et je dois être en mesure de le changer au moment de l'exécution. Dans le concepteur de paramètres, lorsque le type d'un paramètre est "Chaîne de connexion", il n'est pas possible de modifier la portée en "Utilisateur". Et l'ensemble de données généré ne fournit pas de constructeur permettant de choisir la chaîne de connexion lors de l'exécution, il utilise toujours celui dans les paramètres. Savez-vous pourquoi la SP a introduit cette restriction?

Avez-vous une solution de contournement?

J'utilise actuellement une solution de contournement qui est vraiment moche: je change le type du paramètre en "String", et la portée en "User". De cette façon, je peux le changer à l'exécution et ça fonctionne bien. Le problème est que lorsque j'ai besoin de modifier l'ensemble de données dans le concepteur, je dois le redéfinir à "ConnectionString", sinon le concepteur ne fonctionne pas.

Merci d'avance pour vos suggestions!

Répondre

4

pouvez de modifier la valeur d'un paramètre ApplicationScope lors de l'exécution. Bien que la propriété générée et fortement typé est que vous pouvez utiliser en lecture seule:

Properties.Settings.Default["App1"] = "bbb"; 

Après cela, Properties.Settings.Default.App1 va lire « bbb »;

Cela devrait permettre de laisser le temps de conception seul.

Vous ne pouvez pas utiliser Settings.Default.Save() pour les paramètres ApplicationScope, mais cela est intentionnel. Un utilisateur normal n'a pas les privilèges pour écrire dans un sous-dossier du programme   Fichiers

+0

Merci pour votre réponse. C'est une bonne solution, mais Properties.Settings.Default.Save() ne sauvegarde pas ce paramètre ... Je suppose que je pourrais l'enregistrer manuellement ailleurs et toujours l'écraser quand mon application démarre. –

+0

C'est exactement ce que vous devriez faire. Un utilisateur normal n'a pas les droits d'enregistrer dans \ Program Files \ –

+0

merci cela m'aide beaucoup! :RÉ – gumuruh

Questions connexes