答案 0 :(得分:31)
SQL CE 3.5不能与ASP.NET一起使用,必须使用4.0 CTP。
从here下载。
安装运行时。
将以下目录内容(包括x86和amd64文件夹)复制到ASP.NET应用程序的bin文件夹中: C:\ Program Files \ Microsoft SQL Server Compact Edition \ v4.0 \ Private
更新:使用Desktop文件夹中的System.Data.SqlServerCe.dll来避免中等信任问题
myapp\bin\
System.Data.SqlServerCe.dll
myapp\bin\x86
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
myapp\bin\amd64
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
添加对刚放入/ bin文件夹的System.Data.SqlServerCe.dll文件的引用。
将SQL Compact sdf文件放在App_Data文件夹中。
添加连接字符串:
<connectionStrings>
<add name ="NorthWind"
connectionString="data source=|DataDirectory|\Nw40.sdf" />
</connectionStrings>
连接! : - )
using System.Data.SqlServerCe;
protected void Page_Load(object sender, EventArgs e)
{
using (SqlCeConnection conn = new SqlCeConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;
conn.Open();
using (SqlCeCommand cmd = new SqlCeCommand("SELECT TOP (1) [Category Name] FROM Categories", conn))
{
string valueFromDb = (string)cmd.ExecuteScalar();
Response.Write(string.Format("{0} Time {1}", valueFromDb, DateTime.Now.ToLongTimeString()));
}
}
}
答案 1 :(得分:13)
如果您使用的是使用providerName但尚未安装SDK的连接字符串,那么您还需要将此添加到web.config(或app.config)
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0"/>
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
注意:安装SDK时需要“删除”,因为这会将此信息放入您的machine.config
答案 2 :(得分:2)
好的,这是一个猜测,因为你正在为他们钓鱼。
在您复制到引用目录的程序集上运行corflags.exe。你在建造什么类型的机器?如果您使用的是64位计算机并且正在编译为x64或anyCpu,请确保corflags告诉您引用不是仅32位引用。也许它会“退回”你的GAC中的错误版本或其他东西。如果它告诉你引用的程序集只是32位,要么将项目编译为32位项目,要么找到64位版本的DLL?
答案 3 :(得分:1)
如果使用NuGet安装SQL CE提供程序,最简单的解决方案是添加一个生成后步骤,以便从NuGet包NativeBinaries文件夹中复制这些
答案 4 :(得分:0)
关键是我意识到私有目录(C:\ Program Files \ Microsoft SQL Server Compact Edition \ v4.0 \ Private)中的System.Data.SqlServerCe.Entity.dll版本是4.0.0.1,桌面目录(C:\ Program Files \ Microsoft SQL Server Compact Edition \ v4.0 \ Desktop \ System.Data.SqlServerCe.Entity)下面的版本是4.0.0.0。 Private目录中System.Data.SqlServerCe.dll的版本是4.0.0.0。
我认为微软在没有对SqlServer.dll进行相应更新的情况下分发更新的SqlServerCe.Entity.dll是一个错误。