SQLiteのSubSonic接続文字列
-
03-07-2019 - |
質問
シンプルな永続化レイヤーを必要とするデスクトップアプリを書いています-SubSonicと、SQLiteで動作する機能があることがわかりました。ただし、データベースファイルをユーザーのAppDataフォルダーに保存する必要があり、そのような値をapp.configに入れる方法がわかりません。絶対パスを使用したくありません。
app.configは何らかの方法で環境変数にアクセスしたり、アプリケーションデータフォルダーを参照したりできますか?
解決
接続文字列にapp.configのAppDataフォルダーを指定する方法はありません。
ただし、インストール中またはアプリケーションの初回実行時に、構成ファイルに値を書き込むことができます。
他のヒント
subsonic v2.xの場合、app.config接続文字列を無視し、データベースで作業する前に実行時に設定するだけです。プロバイダー名はもちろん同じままです。
string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"MyApplication\Northwind.db3");
DataService.Providers["Northwind"].DefaultConnectionString =
String.Format(@"Data Source={0};Version=3;New=False;Connection Timeout=3", dbPath);
「フレームワークの方法」 appdataを見つけるには、Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)を使用します
これは、プラットフォームに関係なく正しいappdataパスを見つけます。
いずれかの言語でASP.NETを使用している場合、いくつかの方法があります
Server.MapPath("〜")は、アプリケーションのルートをフルパス名として返します。その後、「/ app_data」を追加するだけです。完全なパスを取得するために。
代わりにHttpContext.Current.RequestおよびHttpContext.Current.Applicationを検査します 同じフォルダーを提供する多数の(そして今述べたものよりもはるかに優れた)プロパティがあります-フルパスとしてアプリケーションのルートになります。
アプリケーションが仮想フォルダーとしてあり、アプリケーションを含む通常のフォルダーがそのフォルダー上のIISで構成されている場合でも、これらはすべて機能することに注意してください
ただし、これは実行時にのみ可能であるため、app.configで実際に言及することはできません。 app.configが常駐するIE" ../ App_Data"からの相対パスを使用してみてください。または" / App_data"しかし、あなたが正確な要件であるかどうかはわかりません。
幸運