Frequently asked questions
Licensing, database design, provisioning, client libraries and troubleshooting.
Why should I use SyncStudio?
It saves time, effort and cost. SyncStudio handles the whole job of syncing a Microsoft SQL Server database with many clients, including the client-side sync code you would otherwise write from scratch, so you can focus on your app and get to market sooner.
Why not just use the Microsoft Sync Framework?
SyncStudio is built on the Microsoft Sync Framework and adds the parts it lacks. The Framework is free, but it is a low-level toolkit that takes time to learn and leaves the device side entirely to you. With SyncStudio you don’t need to learn it or write server or client sync code.
I have thousands of clients. How do I deploy the database to all of them?
You don’t have to. On a client’s first sync, SyncStudio sees that the local database is missing, downloads the schema from your server and builds it in SQLite, SQL LocalDB or SQL Server. No coding on your part.
Does SyncStudio scale to a very large user base?
Yes. The sync service runs under IIS, so for a very large user base you can run several web servers to share the load.
How does SyncStudio help me maintain many client databases?
The hard part is keeping client databases in line after server structure changes. Automatic schema synchronization handles that: if you follow a few design rules when you change structures, schema updates are transparent to clients.
Do I need to be a developer to use SyncStudio?
No. An administrator can configure a complete sync system in the Sync Management Console without code. If your app doesn’t need a private database, a sample sync client app can handle syncing with no programming.
What kind of license do I need?
There are three: the free Developer license, Production licenses and Royalty-Free licenses. See the licensing page for what each includes.
We’re a software company. Can we resell SyncStudio?
Yes. Authorized resellers earn on each license they sell. See the reseller program or email sales@handapps.com.
Do you offer an enterprise license?
Yes. Email sales@handapps.com about licensing for a large user base.
Can more than one user share a user ID?
No. Each user needs a unique user ID. Users who share one interfere with each other and fail to sync; fixing it means deleting the affected local databases, which loses any unsynced records. Shared IDs also break the per-user license terms.
Does my server need an internet connection?
Yes. Even if clients sync only over your internal network, the server needs outbound internet access to verify the license periodically. If it can’t reach the licensing server, SyncStudio stops working.
What about data integrity?
SyncStudio applies each sync session as a single transaction. The server isn’t changed until the whole upload finishes without errors. The standard Microsoft Sync Framework commits batch by batch, which can leave a database partly updated.
I need replication, not two-way sync. Is that supported?
Yes. Mark the tables download-only. Server changes go to clients, and changes made on the client are ignored. Only changed records are sent.
We only collect data in the field. Can we sync uploads only?
Yes. Mark the tables upload-only. Client data goes to the server and server records aren’t sent back. You can mix bi-directional, download-only and upload-only tables in one database.
My Android app needs a private database. Can I use a sample sync client app?
No. A stand-alone sync app can only reach a database other apps can see. For a private database, add the SyncStudio client library to your project and call the sync functions from your own app.
Can I use foreign keys?
Yes, foreign keys are fully supported. Every table and field in the relationship must be part of the sync project, and you set the table sync order during provisioning so parent rows arrive before child rows.
Can any SQL Server database be synchronized?
Generally yes, within the Microsoft Sync Framework’s rules. Every synchronized table needs a primary key, and table, field and index names can’t contain special characters such as $ or spaces. If you control the schema, rename the objects or add companion fields.
Some tables use an auto-increment integer primary key. Is that allowed?
Not for rows created on devices. Two clients could assign the same number and conflict. Use uniqueidentifier keys for automatically assigned values.
Which data types are supported?
SyncStudio maps each server field to the closest client type: SQL Server integer types become SQLite Integer, floating-point types become Real, and strings become Text. Geography and geometry fields can be synchronized when the client database is SQL Server or SQL LocalDB, but not to SQLite clients. Timestamp fields can’t be synchronized.
Why are SQL Server dates stored as strings in SQLite?
SQLite has no date type. Strings were chosen because they are the most flexible and cover the widest range of dates.
I need to make a very small change to my database structure. Do I still have to de-provision?
Yes, if the change touches a synchronized table. Any structure change to synchronized tables, or to which tables and fields you sync, means de-provisioning, changing, re-provisioning, and regenerating and redeploying the server code. Schema synchronization then carries the change to clients.
I need to change a table that isn’t synchronized. Do I have to re-provision?
No. Changes that affect only tables you don’t sync don’t require re-provisioning.
What happens when I de-provision and re-provision?
The server loses its record of each client’s sync state. On each client’s next sync, SyncStudio first aligns the schema, then does a full sync of all records.
What if a change “breaks” schema synchronization?
Have every client sync and confirm all data is on the server; ask clients to stop entering data; have clients delete their local database; back up the server database and make the changes; de-provision and re-provision; regenerate the code and redeploy it to IIS; then have every client sync.
Can each device sync more than one database?
Yes. Create a separate sync profile for each database.
Should I use SSL to encrypt sync sessions?
Generally yes. Install a certificate from a recognized certificate authority, because most client operating systems reject self-signed certificates and the sync will fail. Plain HTTP is unencrypted, and some mobile carriers block non-HTTPS traffic.
I want complete control over the client sync process. Can I still use SyncStudio?
Yes. You get the sync client libraries plus sample sync clients with source code. Modify the samples or integrate just the library.
Which client platforms and databases are supported?
Client libraries are available for Android, iOS, Basic4Android, Xamarin, .NET MAUI and Windows. Supported client databases are SQLite, SQL LocalDB and SQL Server, including Express.
Can we build SyncStudio into our own app so it works seamlessly?
Yes. With the client library you keep full control of the user experience, and on most platforms your database stays private to your app. The libraries ship as a .JAR for Android and Basic4Android and as .DLL files for .NET platforms.
What are the server requirements?
Windows 10 or 11, or Windows Server 2019 through 2025 (2025 recommended for production), with IIS 10 or later and .NET Framework 4.0 or later (4.8 or later recommended). The server database is SQL Server or SQL Server Express 2019 or 2022. Code generation needs Visual Studio Build Tools 2019 or 2022, or a full Visual Studio license. See documentation for details.
What is the minimum Android version?
Android 9 (Pie, API level 28) or later.
Do I need to install the Microsoft Sync Framework myself?
No. The SyncStudio installer downloads and installs the Microsoft Sync Framework 2.1 components if they’re missing.
Can I run SyncStudio on a virtual machine?
Yes. Virtual and physical machines are both supported, and you can host just the database or the whole solution in a virtual machine.
SyncStudio won’t let me add some tables to my sync project. Why?
Usually one of these: the table has no primary key; its name has disallowed characters; it uses SQL reserved words as table or field names; or a primary key field has the same name as its table. A message explains the specific problem, and the fix is usually to rename the table, field or index.
What happens when a sync session fails?
Usually it’s a data connection problem. Uploads and downloads each run as a single transaction: if an upload fails, the server is unchanged; if a download fails, the client is unchanged.
Sync fails for a table with very large records (over 1 MB). What can I do?
SQLite’s record buffer is limited to 1 MB. Split the table’s fields across two or more tables so each record stays under the limit.
One device keeps failing to sync while the others are fine. What now?
The device may be faulty or its database corrupted, or it may hold data the server rejects, such as 30 characters in a 20-character field. SQLite doesn’t enforce field sizes, so your app should validate data. Deleting the local database fixes corruption but loses unsynced records.
Some fields can’t be synchronized because of special characters. What can I do?
Rename the fields. If you can’t, create a companion table with valid names, keep it current with a trigger and sync only the companion table.
Still have a question? Email support@handapps.com, or talk to our team.