【发布时间】:2023-04-08 23:04:01
【问题描述】:
我使用的是 Visual Studio 2008 Pro。
我可能在这里遗漏了一些非常明显的东西,但我一直在尝试让 Sql Server compact 4 的 CTP 在我的 asp.net mvc 应用程序中工作。我几乎找不到关于如何设置它或工作示例应用程序的说明。我的目标是私人安装,所以我可以将它包含在我的网络应用程序中,而无需在我的域托管上进行 sql server 设置。这真的只是我随心所欲地试图解决这个问题。我不打算举办市场或任何与此相关的活动。
因此,我已将安装在基本 4.0 方向 (c:\Program Files\Sql Server compact\v4.0) 的所有 dll 复制到我的应用程序的 lib 文件夹中。我已将复制到输出方向选项设置为“如果较新则复制”。然后我引用 System.Data.SqlServerCE dll 并将“复制本地”设置为 True。
我通过 Sql Studio Express 创建了一个 sdf 文件。重要的一点是,我没有看到创建此文件的 CE 4.0 版本的选项,因此它是使用 CE 3.5 创建的。我创建了几个表,向这些表中添加了几行,将 *.sdf 文件复制到我的 App_Data 目录。值得一提的是,在 VS 2008 中,这个文件从未出现在我的项目中,但它确实存在于 App_Data 目录的物理位置。我不确定这是为什么。
接下来,我只是尝试通过以下方式与我的 sdf 文件建立基本连接:
SqlCeConnection conn = new SqlCeConnection("DataSource=rpg.sdf");
这会产生以下错误:
Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8402. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
我想从这里开始,我只是尝试让 Sql CE 3.5 工作。我将本地安装的 Sql CE 3.5 升级到 sp2。我将 dll 复制到基本位置 (c:\Program Files\Sql Server compact\v3.5),包括从我的项目引用中删除和读取 System.Data.SqlServerCE dll 的版本。
这里奇怪的是,当我右键单击并查看引用的 SqlServerCE dll 的属性时,它总是说它的版本是 4.0.0.1。
伙计们,我真的可以在这里使用一些方向。我搜索了堆栈溢出、帮助文档、在线书籍和谷歌搜索。我真的没有找到任何东西可以从 CE 3.5 或 4.0 的最顶层获取并告诉我要添加什么 dll,将它们放在哪里,如何引用它们,如何将 .sdf 文件添加到我的项目中,连接到它,并从中查询。我确实遇到了一些关于应该使用 Sql CE 3.5 的 IBuySpy 门户示例应用程序的提及,但实际上无法导航到 msdn 下载迷宫来获取它。理想情况下,我想为 CE 4.0 设置私有部署。
我全神贯注。建议,点,任何将不胜感激。谢谢!
是的,我看到了 KB。它没有帮助
在这里查看:http://support.microsoft.com/kb/974247
CORFLAG 的结果
好的,试过了,这是我的结果: C:\Development\Mvc2MessingAround\Mvc2MessingAround\bin\Lib>corflags System.Data。 SqlServerCe.dll Microsoft (R) .NET Framework CorFlags 转换工具。版本 3.5.21022.8 版权所有 (c) 微软公司。保留所有权利。
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
我发誓我安装了两个版本的 Sql CE (3.5/4) 的 x86 版本。安装程序可能会因为我的处理器支持 64 位而感到困惑,但我运行的是 Windows xp sp 3 32 位。结果似乎表明它是 64 位的。是这样吗?
添加的细节
迄今为止,已在 2 台机器上尝试过以下配置。两者都是带有 64 位处理器的 Windows xp sp3 32 位。两者的开发环境都是VS 2008 Pro。机器 2 上的结果是在全新安装 Sql CE 4 Ctp 之后出现的。
配置#1
myapp\bin\
System.Data.SqlServerCe.dll
myapp\bin\private
amd64
x86
myapp\bin\private\x86
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
myapp\bin\private\amd64
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
错误:
An exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.DLL but was not handled in user code
Additional information: Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8402. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
代码:
SqlCeConnection conn = new SqlCeConnection();
配置 2
与 #1 相同,但在 myapp\bin 方向使用 System.Data.SqlServerCE.Entity.dll。
点击上述代码之前的页面错误。这是消息:
无法加载文件或程序集“System.Data.SqlServerCe.Entity”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.BadImageFormatException:无法加载文件或程序集“System.Data.SqlServerCe.Entity”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。
我检查了 VS 2008 Pro 中的项目设置,并将 .Net 3.5 框架设置为目标。
配置 3
与 #1 相同,除了 System.Data.SqlServerCE.dll 是从 myapp\bin\private 文件夹中引用的。
结果与 CONFIGURATION #1 相同(错误消息 100% 相同,并且错误发生在同一行代码中)。
正确的配置
按照 Erik 的指示(如果我更仔细地遵循它们),设置应该是
myapp\bin
x86
amd64
System.Data.SqlServerCE.dll
直接从 bin 文件夹中引用 System.Data.SqlServerCE.dll 以获取代码。我愚蠢地认为需要包含 Private 文件夹,但事实并非如此。不要将 System.Data.SqlServerCE.Entity.dll 放在 bin 文件夹中,除非您使用的是 .net 4.0 解决方案。我认为 dll 不适用于 3.5。
有用的链接:
【问题讨论】:
-
System.Data.SqlServerCe.dll 是任何 CPU...
-
使用配置 3,没有 Entity.dll 文件。错误的文件夹结构!将以下目录内容(包括 x86 和 amd64 文件夹)复制到 ASP.NET 应用程序的 bin 文件夹: C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private 中不应有“Private”文件夹你的 asp.net bin 文件夹。在您的 bin 文件夹下,有一个 x86 和 amd64 文件夹,每个文件夹都有正确的文件。
-
VS 2010 和 ASP.NET MVC 3 Beta 也会发生这种情况
-
如果您了解自己的架构,您只需要 x86 或 amd64。如果那更干净,您也可以在输出文件夹本身中拥有所有 dll(通过在 x86 文件夹中移动 dll 并删除文件夹)。
-
您好,该配置在 Windows 7/8/10 中完美运行,但在 Windows XP 中则不行。对此案有任何想法,我将不胜感激。
标签: c# asp.net sql-server-2005 asp.net-mvc-2 sql-server-ce