1

私はC#winforms、sqliteアプリケーションのセットアッププロジェクトを行っています。接続文字列は少し問題があるようです。ユーザーは、作業したいデータベースをある場所に配置します(vは彼に通知します)。この例では"C:\\Program Files(x86)\\DefaultCompany\\RSetup";、ユーザーは自分のDBのコピーを操作できます。

そのため、Program.csMainでデータディレクトリをこのパスに設定しています。これが私が考えることができる唯一の方法です。より良い方法があればそれはgrt!!。

 App.config 

        <add name="ConnString" connectionString="|DataDirectory|\MySQlite.db;Compress=True;Version=3"
              providerName="System.Data.Sqlite" />

  Program.cs 
    Setting the datadirectory to the path of the executable. Currently hard coded the path of the executable 
      static void Main()
            {

                   AppDomain.CurrentDomain.SetData("DataDirectory","C:\\Program Files(x86)\\DefaultCompany\\RSetup");

これは機能していないようです。データが空白でない場合を除いて、エラーは発生しません。セットアップと通常のプロジェクトの両方で機能していないようです

ありがとうJC

4

1 に答える 1

0

データベースがどこにあるかをユーザーに尋ね、そのパスをどこかに保存して(ユーザー設定など)、いつでも取得できます。これにより、ユーザーはそれを配置する場所をより柔軟に設定でき、必要に応じて、同じマシン上の複数のユーザーが独自のデータベースを持つことができます。

ここにいくつかの擬似コードがあります...

string dbLocation = Properties.Settings.Default.DatabaseLocation;
if (string.IsNullOrWhiteSpace(dbLocation)
{
    dbLocation = AskUserForLocation();
    Properties.Settings.Default.DatabaseLocation = dbLocation;
    Properties.Settings.Default.Save();
}

AppDomain.CurrentDomain.SetData("DataDirectory",dbLocation);

このアプローチを使用して、ユーザーが必要に応じて場所を変更できるようにするメニューオプションを追加することもできます。

また、接続を作成する場所を含め、どこからでも値を取得する機能を提供します。接続文字列を読み取った場所と新しい接続を作成する場所の間の場所にパスを追加できます。

SQLiteConnection myConnection = new SQLiteConnection;();
myConnection.ConnectionString = Path.Combine(Properties.Settings.Default.DatabaseLocation, myConnectionString);
myConnection.Open();
于 2012-08-23T18:12:18.157 に答える