Search code examples
entity-frameworksql-server-ce

How to open a password protected SQL Server CE database with Entity Framework


I am using EF 6.0 and SQL Server CE 4.0. The .sdf file is password protected, which I verified by opening the file with LinqPad. When I try to open this database in code with the following connection string, I get an exception:

The specified password does not match the database password

Code:

using (var context = new MyDbContext("ExamManagement"))
{
    context.Database.Initialize(false);
}

Connection string:

<connectionStrings>
    <add name="ExamManagement" 
         connectionString="Data Source=|DataDirectory|Pikeman.sdf;Max Database Size=4091;Password=123;" 
         providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>

enter image description here Stack trace:

at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery
1.<>c__DisplayClass7.b__5()
at System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Data.Entity.Internal.LazyEnumerator
1.MoveNext()
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)


Solution

  • The connection string is OK (usually I don't specify Max Database Size, you can try to delete the parameter but I'm quite sure this is not the problem).
    So, in your case, I think you are probably opening a database with a different password (as the exception suggests) or you are opening a wrong database. Try to specify an absolute path and open the database from that path, for example

    <connectionStrings>
        <add name="ExamManagement" 
             connectionString="Data Source=C:\temp\Pikeman.sdf;Password=123;" 
             providerName="System.Data.SqlServerCe.4.0" />
    </connectionStrings>