0

他のシステム (私の場合、VM Virtual Box を使用して仮想化された Windows XP) でアプリケーションを実行しようとすると、データベースに接続しようとするとエラーが発生しました (XP バージョンにリリース フォルダーをコピーしました。 sdf データベース ファイルが含まれています)。私のデータベースは SQL Server Compact データベース (sdf ファイル) です。

データベースに接続するためのコードは次のとおりです。

 if (_Connection == null)
                    _Connection = new SqlCeConnection(@"Data Source = .\Database.sdf");

私の開発環境(Windows 8、VS 2012)で試してみるとうまくいきます。

アプリケーションは XP マシンで正常に起動しますが、データベースへの接続が必要なときにクラッシュします。

私はこのアプローチを試しました: データベースファイルへの相対パスを持つ接続文字列

コード :

string ConnectionString = @"Data Source=|DataDirectory|\Database.sdf";
string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
string path = (System.IO.Path.GetDirectoryName(executable));
AppDomain.CurrentDomain.SetData("DataDirectory", path);

_Connection = new SqlCeConnection(ConnectionString);

しかし、リリース モードでコンパイルしようとすると、いくつかのエラーが発生します。

エラー 1 データベース ファイルが見つかりません。データベースへのパスを確認してください。[データ ソース = C:\Users\Benj\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\1r55aqij.l5f\p2ffjoyu.4ex\Database.sdf] C:\Users\Benj\Travail\Projets\UNISO\ Programme\UNISO V1.0\UNISO\UNISO\Pages\FAQEdit.xaml 14 9 UNISO

データベースは、アプリケーション フォルダーにデプロイする必要があります。

SQLサーバーコンパクトをインストールせずにアプリケーションを展開するためにこれを試しました: http://msdn.microsoft.com/en-us/library/vstudio/aa983326.aspx

しかし、発行ウィザードを使用したくありません。リリースフォルダーでプログラムを共有して実行したいだけです。

編集 :

XP VM にSQL Server Compactをインストールすると、問題なく動作します。したがって、問題は sdf ファイル パスに関するものではありません。この問題は、SQL Server Compact DLL をプロジェクトに追加する方法に起因する可能性があります。しかし、上記のリンクに記載されていることを正確に実行しました (ウィザードを使用した展開を除く)。

アップデート :

このリンクhttp://msdn.microsoft.com/en-us/library/vstudio/aa983326.aspxでわかるように、SQL Server Compact アプリケーションを展開するには 2 つの方法があります。最初の方法は、従来の Windows インストーラーを使用することです。私はそれを試してみましたが、うまく動作し、私のアプリケーションは完全に動作しますが、この方法を使用したくありません (クライアント コンピューターに何かをインストールしたくありません。スタンドアロン フォルダーを共有したいだけです)。2 番目の方法は、プライベート ファイル ベースの展開方法です (これは、私が使用したい方法です)。上記のリンクの「プライベート ファイル ベースの展開」の部分で説明されているすべての手順に従いましたが、アプリケーションを実行すると、データベースへの接続時に停止します。足りないものはありますか?

4

1 に答える 1

0

データベース ファイルがアプリケーションのフォルダにある場合は、次のようにしてください。

string appFolder = Path.GetDirectory(Assembly.GetEntryAssembly().Location);
string dbFile = Path.Combine(appFolder, "Database.sdf");
string ConnectionString = String.Format(@"Data Source={0}", dbFile);

ちなみに、Sql Server Compact は、インストールせずに使用することを意図しています。実際にはサーバーではなく、データベースを管理する一連の DLL です。

.\Database.sdf.\は、アプリケーションが存在するフォルダーに対して相対的に解決されず、現在のディレクトリに対して相対的に解決されるため、機能しない可能性があります。これは異なる場合があります! そのことを心に留めておくことが重要です。

于 2013-09-19T12:37:07.217 に答える