0

我似乎与Windows 7 上的 SQLServerCE SDF 文件中的另一个用户有同样的问题,但是来自该线程的建议并没有解决我的问题。

这与 SQL Server CE v3.1(DLL 版本 3.0.5300.0)有关,我可以在 Windows XP 32 位机器上使用实用程序构建 SDF 文件,但在我的 Win 7 开发机器上使用相同的编译代码和 DLL &一个独立的 Win 8 机器,它将不允许在设备上正确查询数据库。

比如说。

SELECT Name FROM USERS WHERE Name = 'Joey'

应该从数据库返回 1 个结果。如果它是在 windows XP 机器上编译的,它会工作,如果它是在 Windows 7 / 8 机器上编译的,它不会被读取并且结果集是 0。

这是一些奇怪的行为,因为并非所有查询都受到影响。如果用不同的where子句查询同一张表,结果是不同的。直接在 VS 2005 中检查文件或使用我编写的读取 .SDF 文件的实用程序,我可以看到查询在 Windows 7 / 8 上都可以正常工作。

似乎只有将 SDF 文件复制到 Windows 6.5 设备后,这才会成为问题。这与构建文件 SQL Server CE v3.1(DLL 版本 3.0.5300.0)的应用程序具有相同的 DLL。

我已经检查并可以看到它不是 x64 / x32 架构,因为在 32 位或 64 位 Win 7 或 Win XP 机器上构建时结果相同。

从上一篇文章中,我确实看到了一些来自 MS 的简短但有用的信息(http://blogs.msdn.com/b/sqlservercompact/archive/2009/04/01/after-moving-the-database-from-one-platform -to-other-the-first-sqlceconnection-open-takes-more-time.aspx )

我正在寻找解决此问题的方法,但任何其他信息都会有所帮助,例如...如何检查在 Visual Studio 中的设备(如模块)窗口上运行的 DLL 版本确实会有所帮助。

4

1 回答 1

0

如果您曾经不幸不得不使用早期版本的 SQL Server CE (< 3.0.5300.0),那么这是一个有趣的问题。虽然这在当时是一个限制,但需要一段时间才能解决。

我重新检查了设备上的所有内容。现在,安装程序包中包含了 3.0.5300.0 的正确 DLL,这些未复制到应用程序目录“$\DEVICE\Program Files\My Application”。为了让我能够在 Windows 7 / 8 上编译数据库并让该数据库在 Windows 6.5 设备上工作,我必须手动确保桌面应用程序和 Windows 设备上都存在正确的文件。

我在两个应用程序中包含的文件如下:-

  • sqlceca30.dll
  • sqlcecompact30.dll
  • sqlceer30EN.dll
  • sqlceme30.dll
  • sqlceoledb30.dll
  • sqlceqp30.dll
  • sqlcese30.dll
  • System.Data.SqlServerCe.dll

它们的版本为 3.0.5300.0,修改日期为 22/12/2006,在任何早期版本下编译时,我从“C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.1”获取它们(无论如何对我来说)失败了。

希望它可以帮助其他可能陷入困境的人,因为我在那里没有看到太多。

于 2013-10-31T11:51:25.707 回答