无法让sql server compact 3.5 / 4与ASP .NET MVC 2一起使用

时间:2010-07-11 14:19:07

标签: c# asp.net sql-server-2005 asp.net-mvc-2 sql-server-ce

5 个答案:

答案 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是一个错误。