MSDN Webcast: Introducing SQL Server Compact 3.5

On Wednesday, Jan 16th '08 from 9am-10am PST time, I'll be doing an MSDN Live webcast covering an introduction to SQL Server Compact 3.5.  This will be my first public presentation of SQL Server Compact since we've shipped last November. 

Working at Microsoft is interesting.  Because of the ship cycles, by the time we've shipped the product, many of us have been working on the "next thing" for several months.  It will be great to finally show the product we actually shipped, and everyone can get started.

This presentation will be mostly based on the SQL Server Compact presentation I gave at Tech Ed EMEA, so if you want to get a preview of the content, you can download the deck here:

Presentations & Demos from Tech Ed Barcelona 07

SQL Server Compact Deployment
Using SQLce under ASP.NET
Creating Database Schema In Code
Direct Data Access with the SqlCeResultSet
ISAM Data Access with the SqlCeResultSet
Database Viewer-Used for Security Demo
My Recipe - Using SQLce as a custom doc format

The Tech Ed content is based on 75 mins, so I'll be trimming this a bit, and leaving some time for Q&A.  I'm looking forward to hearing from all of you.  BTW, if you have some specific topics you'd like me to cover, I'm finalizing the content today for anyone that wants to submit some ideas.


Comments (19)
  1. zac morris says:

    Any chance a recording of this webcast will be posted to Channel 9 in the near future?  I’d love to here what you have to say but the whole msevents thing has never worked for me (XP SP2, IE7, etc…) and is a real PITA.  Thanks, Zac Morris

  2. Jared says:


    Was this Webcast recorded, and if so from where can I download?  Also, do you have any info, or a projected release date for 3.5 SP1.


  3. You have mentioned that SQL Server Compact 3.5 supports SET IDENTITY_INSERT ON statement. How do you execute this against a database? The Visual Studio 2008 Designer does not allow SET statements and SQL Server Management Studio does not support Version 3.5 of CE. Please help…

  4. Steve Lasker says:

    Hi Sameer,

    Your correct that VS doesn’t have the nice, generic T-SQL editor like SQL Server Management studio.  This is something we’re hoping to consolidate in the next release of Visual Studio.  While you can do this in Management Studio 2008 (CTP5), you can also do this in code with VS 2008.

    In this sample Creating Database Schema In Code you’ll see how I saved the database schema creation scripts as a embedded, strongly typed resource.  You could author your Identity Inserts here when used within your application.

    If you’re looking for a generic T-SQL editor to poke around during development, than Management Studio 2008 is what you’ll need today.


  5. Peter says:


    Is it possible to deploy and use CE 3.5 on Windows 2000 having .Net Framework 2.0 or will I have to use CE 3.1?

  6. Steve Lasker says:

    Hi Peter,

    There are actually two questions.  

    Q: Does Compact work against FX 2.0, or does it require FX 3.5?

    A: Other than the ADO.NET Entity provider comming in SP1, Compact 3.5 will work perfectly fine on FX 2.0.  As you may know, FX 3.5 is really "extensions" to 2.0, not a whole ‘nother version.

    Q: Will Compact work on Win 2k.  

    A: Technically, Compact 3.5 does work on Win2k.  However, we no longer run our test suites on Win2k, so it’s not officially supported.  FX 3.5 isn’t supported, and possibly doesn’t even work on Win2k, so we decided to stop running our test suites on Win2k as QA is often the biggest constraint a product team has to move forward.


  7. Scott says:

    I’m using VS 2008 Team, SQL Express 2005 and SQLCE 3.5. I have designed and built an app around SQLCE 3.5. I now want to Sync up to SQL express 2005 then ultimatly to SQL standard 2005 (2008 when ready). I am running into a couple of problems.

    I can’t sync with SQL express 2005 unless the schema already exists (with Primary keys).

    I can’t script 3.5 from SQL Management Studio Express so I use Data Port console to generate the ‘create table’ script.

    Now I can create a LocalDataCache but as soon as I sync, all the data in the local table is gone.

    What am I doing wrong?

    My data and development path is:

    compact -> express -> standard -> enterprise.

    Is this possible or do I need work the other way round?

  8. Steve Lasker says:

    Hi Scott,

    If I understand the question, you’ve started your app with Compact, including the Schema and Data.  You now want to create that Schema and Data in SQL Server (Express through Enterprise).

    Sync Services, RDA, and Even Merge Replication all assume the database and schema were created on the server first, and you then synchronize the schema and data down to Compact.

    We do have an Upsizing wizard internally that we’ve been hoping to release publically.  Let me check to see if it’s in a form to make public in a CTP like fashion.

    To get you going in the meantime, Sync Services was designed to handle this situation.  The trouble you’re having with scripting out the tables on the server, than synchronizing them is the default options of SyncTable on the SyncAgent configuration don’t attempt to preserve the local data.

    Simply set the SyncTable you’re looking to maintain to be SyncTable. TableCreationOptions  = TableCreationOptions.UploadExistingOrCreateNewTable

    Here’s a post that should be able to help you out:


  9. Scott says:


    Thanks for your help. An Upsizing wizard would be very helpful in this scenario. I ended up using Primeworks Data Port Wizard to move the data and schema to SQL express then I created a LocalDataCache. Sync now works great. Very cool!


  10. gdc says:

    Hi Steve,

    your presentation was really interesting.

    I supposed that SQL Server Compact was only for single application (single process) access, but in your sample you share the same northwind.sdf file with two applications (both with open connections on the file).

    Is this a supported scenario?

    Thank you

  11. Steve Lasker says:


    Yes, you can open connections from multiple threads and processes on the same machine, and this is fully supported.  We use shared memory to map connections between multiple processes.

    The thing we stop at is supporting multiple connections from remote machines.  We really don’t want to re-create the Jet problem where people can get a few connections to a network share, and then things just start getting ugly.  As files continue to grow, it’s just not practical to manage a data file across the network.  You could of course, write a service to front Compact so you get true client/server behavior, but Compact isn’t tuned for thrashing of hundreds of concurrent connections.  If you need multiple connections from the network, this is really where Express is a great place to start.

    However, for your initial question, yes, this is fully supported.


  12. Lee says:


    The "Choosing Between SQL Server 2005 Compact Edition and SQL Server 2005 Express Edition" whitepaper you wrote in 11/2006 stated that 3.5 would support native x64 (or more accurately, the next version after 3.1). I believe that 3.5 still needs WoW. Are there any plans to support native 64-bit with CE?


  13. Steve Lasker says:

    Hi Lee,

    Yes, we absolutely do have a 64bit release coming.  With the popularity of private deployment, we had a few extra challenges we wanted to get right before releasing it, so it’s coming in our SP1 release.  I’ll be posting more info when I have dates I can tell customers when they can get a download of a beta.


  14. Leon says:

    Do you know approximately know in how soon the beta is going to released?

  15. Steve Lasker says:

    Hi Leon,

    The SP1 Beta of Visual Studio 2008 and SQL Server Compact is available here.  When you install Visual Studio SP1, you�ll get Compact SP1 as well.  However, this unfortunately doesn�t include the beta of our 64bit release.  Since this didn�t ship �in VS 2008�, it doesn�t get included with the SP.

    The official statement for SP1 release is �this summer�, which is when we�ll be releasing the 64bit bit release as well.  If you�d like to contact me directly, we can see if we can help you in the shorter term if this doesn�t meet your schedule needs.

  16. dilip kumar says:


    i am getting exception

    “Attempted to read or write protected memory. This is often an indication that other memory is corrupt.”  when try to acces  SQL ce 3.5 DB in Multithread environment.

    Please provde me the solution.



  17. Steve Lasker says:

    Hi Dilip,

    I’m afraid we’ll need a bit more info to understand why you’re getting the error.  Are you saying it works for the first "thread", but not the other?  Are you attempting to use the same connection across different threads?  If so, that would be a problem.  Connections aren’t thread safe.  You can open multiple connections from different threads or different processes against the same database.  You can even pass a connection from one thread to another to maintain a collection of open connections, for perf.  You just can’t use the same connection, at the same time, from two different threads.


  18. Matt Adamson says:

    Hi Steve,

    I also get the same issue from the exception

     $exception {"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."} System.Exception {System.AccessViolationException}

    My call stack looks like

    [Managed to Native Transition]

    > System.Data.SqlServerCe.dll!System.Data.SqlServerCe.SqlCeCommand.ReleaseNativeInterfaces() + 0x23 bytes

     System.Data.SqlServerCe.dll!System.Data.SqlServerCe.SqlCeCommand.Finalize() + 0x23 bytes

    We use a LINQ to SQL data context however we always ensure a new context is created for each. It’s actually used through windows workflow foundation and currently we’ve had to use the manual thread scheduling service due to this issue when the default service is used. As you probably know the default service schedules work using the CLR thread pool.

    I could certainly capture and upload a dump file when this exception occurs if it would help diagnose the issue?

Comments are closed.

Skip to main content