2011-11-12 10 views
0

私は簡単なwinformsアプリケーションを持っています。 SQL Compact DBをLinqで使用しています。 私はクライアントイメージを保持するイメージ列を持っていました。SQLコンパクト - 新しい列を保存できません

イメージのパスを保持するように、列の型をstringに変更したいとしました。 私はそれに応じて列の型をnvarchar(500)とモデルに変更しました。

イメージの列を設定しない場合、問題なく(生成されたメソッドSaveChangesを使用して)オブジェクトをDBに保存できます。

画像フィールドを設定し、すべてが素晴らしい働いている(ホームプレミアムwin.7)私のマシン上でを保存しようと、 画像フィールドを設定し、クライアントマシン上で(勝利をを保存しようとしている。XPプロ)私は次のエラーを取得:

System.Data.EntityException: The underlying provider failed on Open. ---> System.Data.SqlServerCe.SqlCeException: The path is not valid. Check the directory for the database. [ Path = ..\DB\OpticControlMainDB.sdf ] 
    at System.Data.SqlServerCe.SqlCeConnection.ProcessResults(Int32 hr) 
    at System.Data.SqlServerCe.SqlCeConnection.Open(Boolean silent) 
    at System.Data.SqlServerCe.SqlCeConnection.Open() 
    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, 

DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) 
    --- End of inner exception stack trace --- 
    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) 
    at System.Data.EntityClient.EntityConnection.Open() 
    at System.Data.Objects.ObjectContext.EnsureConnection() 
    at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
    at System.Data.Objects.ObjectContext.SaveChanges() 
    at OpticControl.CustomerDetailsModel.SaveChanges() in <MY_PATH>\CustomerDetailsModel.cs:line 502 
    at OpticControl.CustomerDetailsPresenter.SaveCustomerPersonalDetails(Object sender, EventArgs args) in <MY_PATH>\CustomerDetailsPresenter.cs:line 149 

を私は新しい列(「IMAGEPATH」)を作成し、古い列を削除しようとした - 問題がまだ存在しています。

答えて

3

は、私は何が起こっているかを考え出したように(それは、この問題を満たしています他の人に役立つ可能性が)ようですアプリケーションがアクセスしようとしているパスが何であるかを調べ、それが間違っているかどうかを調べます。

私の接続文字列が構造体のパスを指しています:.. \ DB \。

私はFileDialogを使用しているユーザーから画像パスを取得するとき。 XP上のようなものです(win.7ではなく)。これはapplictionコンテキストを変更し、接続文字列を使用するとダイアログの最後のフォルダからナビゲートし始めます(選択した画像はc:\ pics \ pic.jpgにあります。アプリはパスc:\のDBにアクセスします)。

私はこれが絶対パス(相対パスではなく)を使用することによって問題であることを検証しました。

oh ...

0

クライアントのデータベースにも接続していますか?あなたのエラーメッセージは、あなたがそうでないことを示唆していますか?もちろん、エラーメッセージの

The underlying provider failed on Open. ---> System.Data.SqlServerCe.SqlCeException: The path is not valid. Check the directory for the database. [ Path = ..\DB\OpticControlMainDB.sdf ]

:-) ...うそはありませんが、それもクライアントマシン上で指定した場所にデータベースを見つけていないを示していると思われます。

私が使用した

プロセス・モニター(Sysinternalsの)まで:

Here's someone else who was getting this message and how they solved it.

関連する問題