我可以使用 SQLite 作为 2 个或更多应用程序连接的数据库吗?
即我可以用它在不同的应用程序之间共享数据吗?
我正在尝试使用 SqlCeSyncProvider 在两个 SQL Compact 3.5 数据库之间设置同步。我能够为这两个数据库创建一个范围,从而创建一个元表。但是,当我尝试运行 SyncOrchestrator.Synchronize() 时,出现以下错误,并且在插入数据时无法使两个数据库同步:
"An error occurred when initializing adapters for scope 'Person'. Ensure that the scope name specified on the provider exists in the scope metadata table, and that the correct base tables are specified for that scope."
当我运行以下代码时,会为每个数据库创建三个表:Sync_Person_tracking、Sync_scope_config 和 Sync_scope_info。两个数据库在 Sync_scope_info 表中都包含相同的作用域名称 Person。
SqlCeSyncScopeProvisioning ceConfig = new SqlCeSyncScopeProvisioning();
SqlCeConnection ceConn = (SqlCeConnection)syncProvider.Connection;
string scopeName = syncProvider.ScopeName;
if (!ceConfig.ScopeExists(scopeName, ceConn)) {
var description = new DbSyncScopeDescription();
description.ScopeName = scopeName;
var table = new DbSyncTableDescription("Person");
var pkCol = new DbSyncColumnDescription("ID", "int");
pkCol.IsPrimaryKey = true;
table.Columns.Add(pkCol);
table.Columns.Add(new DbSyncColumnDescription("Name", "nvarchar 50"));
table.Columns.Add(new DbSyncColumnDescription("Height", "int"));
table.Columns.Add(new DbSyncColumnDescription("Weight", "int"));
description.Tables.Add(table);
ceConfig.PopulateFromScopeDescription(description);
ceConfig.SetCreateTableDefault(DbSyncCreationOption.Skip);
ceConfig.ObjectPrefix = "Sync";
ceConfig.Apply(ceConn);
}
在上面的代码中,syncProvider 是一个SqlCESyncProvider 对象,它附加了一个连接字符串到指定的数据库。
下面是我使用 SyncOrchestrator 在数据库之间设置同步的代码:
_syncOrchestrator.LocalProvider = localSyncProvider;
_syncOrchestrator.RemoteProvider = remoteSyncProvider;
_syncOrchestrator.Direction = SyncDirectionOrder.DownloadAndUpload;
try {
var sync = _syncOrchestrator.Synchronize();
Console.WriteLine(string.Format("Sync Downloads: {0}\nSync Uploads: {1}\nSync Start Time: {2}\nSync End Time: {3}",
sync.DownloadChangesTotal.ToString(), sync.UploadChangesTotal.ToString(),
sync.SyncStartTime, sync.SyncEndTime));
} catch (Exception ex) {
Console.WriteLine(string.Format("Sync Orchestrator threw exception: {0}", ex.Message));
}
在此先感谢您的帮助!
建议使用哪些数据库作为嵌入式数据库来存储应用程序中的数据?嵌入式数据库可能会也可能不会同步回更大的系统数据库。