我有一个简单的winforms应用程序。 我在Linq中使用SQL Compact DB。 我有一个图像列,其中包含客户端图像。
我想将列类型更改为字符串,以便它保存图像路径。 我已经将列类型更改为nvarchar(500)和相应的模型。
如果我没有设置图像列,我可以毫无问题地将对象保存到数据库中(通过使用生成的方法" SaveChanges")。
设置图像字段并尝试在我的机器上保存(win.7家庭高级版)一切正常, 设置图像字段并尝试在客户端计算机上保存(win。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
我尝试创建新列(&#34; imagePath&#34;)并删除旧列 - 问题仍然存在。
有什么想法吗?
答案 0 :(得分:3)
好像我已经知道发生了什么(这可能对其他会遇到这个问题的人有用):
我已经使用Process Monitor(来自Sysinternals)找出应用程序尝试访问的路径,并发现它是错误的。
我的连接字符串指向具有以下结构的路径:.. \ DB \。
从用户获取图像路径时,我使用的是FileDialog。好像在XP上(不是在win.7上)这样可以在应用上下文中进行操作,当使用连接字符串时,它开始从对话框的最后一个文件夹导航(所选图片位于c:\ pics \ pic.jpg, app将访问路径c:\)中的数据库。
我通过使用绝对路径(而不是相对路径)验证了这是问题。
哦...
答案 1 :(得分:0)
您是否甚至连接到客户端上的数据库?您的错误消息似乎表明您不是?
底层提供程序在Open上失败。 ---&GT; System.Data.SqlServerCe.SqlCeException:路径无效。校验 数据库的目录。 [Path = .. \ DB \ OpticControlMainDB.sdf ]
当然错误消息永远不会...... :-)但它似乎表明它甚至没有在客户机上指定的位置找到数据库。
Here's someone else who was getting this message and how they solved it.