SQL Compact - 无法保存新列

时间:2011-11-12 18:32:39

标签: sql-server-ce

我有一个简单的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;)并删除旧列 - 问题仍然存在。

有什么想法吗?

2 个答案:

答案 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.