如何解释此 SQL Server CE 行为 - 不更新

Posted

技术标签:

【中文标题】如何解释此 SQL Server CE 行为 - 不更新【英文标题】:How to explain this SQL Server CE behaviour - not updating 【发布时间】:2012-07-18 22:51:46 【问题描述】:

我正在构建 WinForms 应用程序,并且正在使用 SQL Server Compact Edition 3.5。

每当我运行 WinForms 应用程序并随后在 Visual Studio 中打开查询编辑器时,我运行的任何更新查询都不会反映在应用程序中。如果我运行Select查询来查看更新的记录,我可以从查询结果中看到数据已更改但未反映在应用程序中。

如果我关闭应用程序并再次运行它,更新会反映在应用程序中。

这正常吗?对此最好的解释是什么?

更新

来自 C#

string sqlceConnString = @"Data Source=|DataDirectory|\medicstores.sdf";

来自 Visual Studio 中的新查询连接窗口

C:\Users\user12345\...\Visual Studio 2010\Projects\StockPro\StockProFormUI\medicstores.sdf

更新

我认为这可能是由于应用程序将数据库文件复制到\StockPro\StockProFormUI\bin\Debug\medicstores.sdf 而不是使用\StockPro\StockProFormUI\medicstores.sdf

我认为|DataDirectory| 被应用程序解析为\StockPro\StockProFormUI\bin\Debug\medicstores.sdf,这使它成为\StockPro\StockProFormUI\medicstores.sdf 中物理文件的新副本,因此它们不一样

【问题讨论】:

显示您的连接字符串。几乎每次都会出现此问题,因为您要连接到 .sdf 文件的两个不同副本。 但是当我关闭 Winform 应用程序并重新运行时,更新变得可见。如果首先打开查询窗口,则数据库文件被锁定,因此应用程序将无法运行。这表明他们正在访问同一个文件 我认为这可能是由于应用程序将数据库文件复制到\StockPro\StockProFormUI\bin\Debug\medicstores.sdf 而不是使用\StockPro\StockProFormUI\medicstores.sdf 是的,就像我说的,您的连接字符串告诉应用程序复制您的 .sdf 文件。将连接字符串更改为指向 Visual Studio 指向的同一个静态 .sdf 文件。 我需要删除|DataDirectory| 并使用完整路径吗?对吗? 【参考方案1】:

先检查你的连接字符串。

断开服务器资源管理器上的 SQL CE 数据库。

我之前也遇到过这个问题。 您需要获取 sqlce 数据库的确切位置,然后更改连接字符串。

首先测试它,将你的 sqlce 放在你的驱动器 c:\ 并添加 Persist Security Info=False;最后。并使用准确的数据库文件路径。

private SqlCeConnection conn = new SqlCeConnection("Data Source=C:\\medicstores.sdf;Persist Security Info=False;"); 

您可以使用 SQL CE 工具来查看您的 SQLCE 数据库,而不是使用 Visual Studio。

SQL Server CE Query Tool - Code Porject

问候

【讨论】:

但是当我关闭 Winform 应用程序并重新运行时,更新变得可见。 尝试断开服务器资源管理器上的 sqlce 数据库。然后将 sqlce 文件复制到驱动器 C:\\ 并添加 ;Persist Security Info=False;在您的连接字符串上进行测试。 我认为这可能是由于应用程序将数据库文件复制到\StockPro\StockProFormUI\bin\Debug\medicstores.sdf 而不是使用\StockPro\StockProFormUI\medicstores.sdf 是的,这就是为什么您需要断开服务器资源管理器上的数据库并尽量不要使用确切的文件路径而不是数据目录。

以上是关于如何解释此 SQL Server CE 行为 - 不更新的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL Server Express 和 SQL Server CE

您如何使用 SQL Server CE 和 SQL Server 2008 Express?

通过 Web 服务将 SQL Server CE 与 SQL Server 2005 同步

如何从 C# 代码将 SQL Server CE 迁移到 SQL Server 2012 Express

SQL Server:此 SQL 语句如何工作

如何从另一个表更新 Sql Server CE 表