当前位置: 首页 > 面试题库 >

SQL Server CE在某些计算机上极慢

晏和风
2023-03-14
问题内容

我已经构建了一个默认情况下使用SQL Server CE 4.0的应用程序,但也可以使用单独的SQL Server(SQL Server Express)。

我已经将它部署到办公室周围的大约10台计算机上,并且除了其中2台之外,它工作正常:副总裁和质量检查人员,当然:-/

在这些计算机上,每个数据库访问大约需要30秒!如果我安装了SQL Server Express 2008 R2,并告诉我的应用程序改用它,则它将运行非常快。

  • 这两个有问题的计算机都是WinXP SP3,但是大多数可运行的PC也是XP。
  • 我正在使用C#.NET 4.0 App通过ClickOnce使用SQL Server CE的私有部署。
  • DbProviderFactory用来允许使用相同的查询文本(或数据适配器)访问SQL Server Express或SQL Server CE。
  • 大多数查询很简单。几个用途DataAdapter
  • 几乎所有查询最终都会返回数据,但是我在日志文件中看到一个返回空的记录,没有错误/异常,但是应该有大约20-40行和大约80列。
  • 对于每个查询,我都会创建,打开和关闭连接。我不清楚SQL Server CE是否需要/建议/不建议这样做。

我不明白为什么该应用程序可以在大多数PC上运行,但在少数PC上却不能运行。

任何想法都欢迎。

谢谢!


问题答案:

此问题的中间原因和解决方法是通过用户访问受密码保护的数据库使用的.NET加密文件。通过更改文件夹的权限解决了该问题。

您可以使用Run-As Admin打开命令提示符并发出此命令(Win XP)

 cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys" /E /G Everyone:R

我还在SQLCE连接字符串代码附近的代码中添加了此注释:

 /**************************************************************************************
 * To get rid of the slowdown on non-admin users you need to grant them read access to this folder:
 * C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys  (XP, 2003)
 * C:\Users\All Users\Microsoft\Crypto\RSA\MachineKeys  (Windows 7 or 2008)
 **************************************************************************************/

此处:http :
//social.msdn.microsoft.com/Forums/sqlserver/en-
US/eb6a01a7-0bfd-41e3-b4c8-34581c5ccaa3/sql-compact-4-locks-up-30seconds-
whens-accessing-encrypted Windows XP上运行时的数据库?forum =
sqlce


注意:在有问题的计算机上,… \
MachineKeys文件夹在WinExplorer中可见,但实际上无法读取文件。“所有人”具有不允许“读取”的“特殊”权限。我认为.NET可能是由域管理员而非本地管理员安装的。

这只是一个解决方法。我仍然不明白为什么该文件夹在几台计算机上却具有奇怪的权限,而在其他计算机上却没有。我正在使用ClickOnce进行部署,因此无法自动更改文件夹权限。

我只在XP上看到过这个问题,其他帖子暗示这只是XP上的问题,因此希望我不必为此担心很长时间…



 类似资料:
  • 我有一些Delphi代码来读取和验证基于XSD文档的XML文件。我正在使用Windows DOM(TMXLDocument)。本文解释了底层逻辑。 它在某些计算机上工作(例如,对有问题的标记抛出异常)。但在较新的计算机上,它不会引发任何异常。 Windows中是否有需要更改才能使其正常工作的设置?或者有人知道用于验证XML的本机Delphi组件吗? XSD文件:http://www.nemsis.

  • 问题内容: 我有一个Java应用程序,它需要某些软件(其中一个是Perl)才能运行。我用来检测Perl的方法是: 如果存在IOException,则声明没有Perl。 但是,我的一位用户抱怨该应用程序不断失败,因为他没有将Perl放在其路径变量中。所以这就是为什么我要问的问题:是否有任何跨操作系统的方法可以检测用户系统上是否安装了Perl(或任何其他软件)以及程序的路径? 问题答案: 我不知道您的

  • 我刚刚下载了用于Linux的nifi-0.5.1。 我很感激你的帮助,

  • 和onActivityResult 和错误的堆栈跟踪 stack_trace=java.lang.runtimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=intent{act=inline-data(havs extras)}}传递到活动{com.madhours/com.madhours.activities.acti

  • 我的Android应用程序无法安装在一些“随机”、较旧的API设备上(任何低于API级别25的设备),错误如下: 所以,基本上看起来… API 我见过类似的问题,答案与小写的包名有关。我已经有了。 有人有什么想法吗? 舱单: BTW我用的是Visual Studio 2019和一夫一妻制3.7