2009-06-06 4 views
1

私はおそらくこの問題に直面した最初の人ではありませんが、どこでも適切な答えを見つけることができませんでした。ConnectionString設定のスコープが常に「アプリケーション」に強制されるのはなぜですか?

強く型付けされたデータセットを使用するWindowsフォームアプリケーションがあります。設計者は、アプリケーション設定で定義された接続文字列を使用します。問題は、この設定がアプリケーションスコープ(したがって読み取り専用)として定義されていることです。実行時にこの設定を変更できる必要があります。設定デザイナーで、設定の種類が「接続文字列」の場合、範囲を「ユーザー」に変更することはできません。生成されたデータセットは、実行時に接続文字列を選択できるコンストラクタを提供しません。常に設定内の接続文字列を使用します。

なぜMSはこの制限を導入したのですか?回避策はありますか?

私は現在、実際には醜い回避策を使用しています。設定の種類を「文字列」に、スコープを「ユーザー」に変更します。そうすれば、私は実行時にそれを変更することができ、正常に動作します。問題は、デザイナでデータセットを変更する必要があるときに、「ConnectionString」に戻す必要があります。そうしないとデザイナーは機能しません。

ご協力いただきありがとうございます。

答えて

4

実行時にApplicationScope設定の値を変更します。生成され、強い型付けされたプロパティは読み取り専用ですが、あなたは使用することができます。その後

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

を、Properties.Settings.Default.App1は「BBB」を読みます。

これは、設計時間の設定だけを残すことを可能にするはずです。

ApplicationScope設定にSettings.Default.Save()を使用することはできませんが、これは意図的です。通常のユーザーにはプログラムのサブフォルダに書き込む権限がありません ファイル

+0

お返事ありがとうございます。これは良い解決策ですが、Properties.Settings.Default.Save()はこの設定を保存しません...私は手動で別の場所に保存し、私のアプリが起動すると常にそれを上書きすることができたと思います。 –

+0

これはまさにあなたがすべきことです。普通のユーザーには\ Program Files \ –

+0

に保存する権限がありません。 :D – gumuruh