SQL Server Compact 3.5を使用してアプリケーション(100%ローカル、サーバーへのアクセスなし)を開発しましたが、コンピューター上で正常に動作します。ただし、別のコンピューターに展開すると、次のエラーが表示されます。
Access to the database file is not allowed. [ File name = data\BDApepucCE.sdf ]
Windows XPコンピューターに展開しました。データベースに書き込もうとするとこのエラーが表示されますが、読み取ると機能します。
Windows 7コンピューターでテストを行いましたが、ファイルがホームグループ(つまり、ローカルネットワーク)を介してアクセスされ、読み取りと書き込みの両方で失敗した場合を除いて、100%機能しました。
プラットフォーム:Windows 7、Visual Studio 2010、および 。NET 4クライアントプロファイル
接続文字列には必ず|DataDirectory|
を使用してください。これが例です
connectionString="Data Source=|DataDirectory|MyDB.sdf"
私はあなたとまったく同じ問題を抱えていました、そして私は| DataDirectory |を追加することによってそれを修正することができました私の接続文字列に。
幸運を。
通常は権限の問題です。 GUIを介して、またはを使用して、App_Dataの.sdfファイルに対する完全なアクセス許可を「Everyone」に付与します
icacls database.sdf /grant Everyone:F
私も同じ問題を抱えていました。私のソリューションは、展開時にTFS/SourceControlにあり、sdfファイルがチェックインされた(つまり読み取り専用)ため、上記とまったく同じエラーが発生しました。 sdfファイルをチェックアウトして再度デプロイしたところ、すべて問題ありませんでした。他のTFSユーザーが同じ問題を経験した場合に備えて、私はそれを共有したいと思いました。
他に2つの提案があります:
また、アプリケーションプールが(アプリケーションプールではなく)ネットワークサービスを使用していて、ネットワークサービスのアクセス許可がAppDataフォルダーの下でフルコントロールに設定されているかどうかを確認することもできます。これは少し前の私の問題で、どうやってやったのか忘れてしまいましたが、この質問は私がどうやってやったのかを思い出させてくれました。
IISメニューの「Webサービス拡張機能」で「サーバーサイドインクルード」を許可する必要があります
それは私のすべての問題を修正しました。
これは一般的な原因ではありませんが、接続文字列にCE SDFファイルへのパスが正しくない場合に、このエラーメッセージが表示されました。エラーが消えたことを修正したら。
次の解決策は私のために働いた:
Windowsの「ProgramFiles」は保護されているため、通常のユーザーはそこに書き込むことができません。アプリケーションはおそらく管理者ユーザーでのみ動作します。
データベースのデータフォルダパスを、すべてのユーザーが書き込み権限を持つ場所に変更します。