他のシステム (私の場合、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 番目の方法は、プライベート ファイル ベースの展開方法です (これは、私が使用したい方法です)。上記のリンクの「プライベート ファイル ベースの展開」の部分で説明されているすべての手順に従いましたが、アプリケーションを実行すると、データベースへの接続時に停止します。足りないものはありますか?