我正在使用Visual Studio 2008 Pro。
可能我很明显地错过了什么,但是我一直在尝试在我的asp.net mvc应用程序中使用Sql Server Compact 4的CTP。我几乎找不到有关如何设置此项或工作示例应用程序的任何指令。我的目标是进行私人安装,以便我可以将其包含在我的Web应用程序中,而无需在我的域主机上进行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,并复制位于基本位置 (c:\Program Files\Sql Server compact\v3.5) 的 DLL,包括从我的项目引用中删除和重新添加 System.Data.SqlServerCE DLL 的版本。
奇怪的是,当我右键单击并查看所引用的 SqlServerCE DLL 的属性时,它总是显示版本 4.0.0.1。
各位,我真的需要一些指导。我已经在 stack overflow、帮助文档、在线书籍和谷歌上搜索了很久,但没有找到任何从 CE 3.5 或 4.0 的最基础开始,并告诉我要添加哪些 DLL,放置在哪里,如何引用它们,如何将 .sdf 文件添加到我的项目中,连接到它并从其中查询的内容。我确实找到了几个提到 IBuySpy 门户样例应用程序应该使用 Sql CE 3.5 的地方,但实际上无法通过 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 Conversion Tool. Version 3.5.21022.8 Copyright (c) Microsoft Corporation. All rights reserved。
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 sp3 32位系统,所以安装程序可能会有些混乱。结果似乎表明它是64位的。是否是这种情况?
添加细节
到目前为止,以下配置在两台机器上进行了尝试。两者都是Windows xp sp3 32位,具有64位处理器。两个开发环境都是VS 2008 Pro。第二台机器上的结果是在安装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相同,但System.Data.SqlServerCE.Entity.dll位于myapp\bin目录下。
在执行上述代码之前,页面出现错误。这是消息:
无法加载文件或程序集“System.Data.SqlServerCe.Entity”或其某个依赖项。该程序集是由比当前加载的运行时更新的运行时构建的,因此无法加载。
描述:在当前 Web 请求的执行期间,发生未经处理的异常。请检查堆栈跟踪以获取有关错误的更多信息,以及错误在代码中的起源。
异常详细信息:System.BadImageFormatException: 无法加载文件或程序集“System.Data.SqlServerCe.Entity”或其某个依赖项。该程序集是由比当前加载的运行时更新的运行时构建的,因此无法加载。
我已经检查了VS 2008 Pro中的项目设置,将.NET 3.5框架设置为目标。
配置3
与#1相同,只是从myapp\bin\private文件夹引用System.Data.SqlServerCE.dll。
结果与配置#1相同(错误消息完全相同,并且错误发生在相同的代码行上)。
正确的配置
按照Erik的说明(如果我更仔细地遵循了它们),设置应该是
myapp\bin
x86
amd64
System.Data.SqlServerCE.dll
将System.Data.SqlServerCE.dll直接引用到bin文件夹中的代码中。 我的错误是认为需要包含Private文件夹,但实际上不需要。 除非您使用的是.net 4.0解决方案,否则不要将System.Data.SqlServerCE.Entity.dll放在bin文件夹中。 我认为该dll不适用于3.5。
有用的链接: