2011-11-12 32 views
0

我有一個簡單的winforms應用程序。 我使用SQL Compact DB與Linq。 我有一個圖像列保存客戶端圖像。SQL Compact - 無法保存新列

我想將列類型更改爲字符串,以便它將保存圖像路徑。 我已經將列類型相應地更改爲nvarchar(500)和模型。

如果我沒有設置圖像列,我可以保存對象到數據庫沒有問題(通過使用生成的方法「SaveChanges」)。

當設置的像場,並試圖挽救我的機器上(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

好像我已經想通了是怎麼回事(它可能是,將滿足此問題的其他人有用):

我用進程監視器(Sysinternals公司)以找出應用程序試圖訪問的路徑,找出它是錯誤的。

我的連接字符串指向一個結構爲:.. \ DB \的路徑。

從用戶獲取圖像路徑時,我正在使用FileDialog。似乎在XP上(而不是在win.7上),這挑戰了應用上下文,當使用連接字符串時,它開始從對話框的最後一個文件夾導航(所選圖片位於c:\ pics \ pic.jpg,應用程序將訪問路徑c:\中的數據庫。

我已經通過使用絕對路徑(而不是相對)驗證了這是問題。

哦...

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 ]

當然,錯誤消息永遠不會說謊...... :-)但它似乎表明它甚至沒有在客戶機上指定的位置找到數據庫。

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