I have been tasked with taking an existing WinForms application and modifying it to work in an “occasionally-connected” mode. This was to be achieved with SQL Server CE 3.5 on a user’s laptop and sync the server and client either via SQL Server Merge Replication or utilizing Microsoft’s Sync Framework.
Currently, the application connects to our SQL Server and retrieves, inserts, updates data using stored procedures. I have read that SQL Server CE does not support stored procedures.
Does this mean that all my stored procedures will need to be converted to straight SQL statements, either in my code or as a query inside a tableadapter?
If this is true, what are my alternatives?
Since SQL Server CE is considered to be an “application data store”, it is assumed that any complex logic that you might normally implement in a SQL Server Stored Procedure will be implemented in the application itself. Many traditional database concepts are not supported in SQL CE, such as constraints, covering indexes, stored procs, UDFs… you name it, SQLCE doesn’t have it!
Because SQL CE is single-user, this assumption more-or-less makes sense; you don’t really need to worry about concurrency or atomicity issues when you have total control over everything that’s happening at the DB level. It helps to not really think of SQL CE as a full-fledged database; it’s more of an alternative to something like SQLite or MS Access.
Your only options are:
Rewrite your application to behave differently (i.e. use simple queries or direct table access) when operating in “disconnected” mode;
Disallow the application from performing the more complex operations unless it is “connected”;
Switch to SQL Express instead, which has a much larger footprint but does support Stored Procedures and most of the other SQL Server goodness.