You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zumero同步SQLite数据库时返回状态码244的故障排查求助

Zumero同步SQLite数据库时返回状态码244的故障排查求助

我新开了这个问题,因为旧问题有点过时了,而且我现在有了新的信息。所有测试都是在真实设备上完成的——Android模拟器的表现不太稳定,不确定是不是和Visual Studio 2019的兼容问题导致的。

我有一个测试程序,代码量很少,运行一直很正常。我在里面加了一些数据库基础操作来排查问题,结果同步从来没失败过,哪怕我一直开着连接(只有当存在活跃的DataReader或者未关闭的事务时,同步才会失败,提示数据库被锁定)。测试程序里的连接字符串参数和客户端应用的完全一致。

测试程序的同步代码如下:

private void SyncData() { 
    SqliteConnectionStringBuilder csb = new SqliteConnectionStringBuilder(); 
    csb.DataSource = _dbFile; 
    csb.ForeignKeys = true; 
    SqliteConnection _conn = new SqliteConnection(csb.ConnectionString); 
    SqliteCommand _cmd = new SqliteCommand("SELECT * FROM CALENDARIO", _conn); 
    SqliteDataReader _dr = null; 
    int i = 0; 

    try { 
        _conn.Open(); 
    } catch (Exception openEx) { 
        string msg = openEx.Message; 
    } 

    try { 
        ZumeroClient.Sync(_dbFile, "", "http://***.***.***.***:nnnn", "tecnomobile", "{\"scheme_type\":\"table\",\"table\":\"users\"}", "username", "password"); 
    } catch (ZumeroException zEx) { 
        _errorMsg = zEx.InnerException != null ? zEx.InnerException.Message : zEx.Message; 
    } catch (Exception genEx) { 
        _errorMsg = genEx.Message; 
    } 

    try { 
        _dr = _cmd.ExecuteReader(); 
        while(_dr.Read()) i++; 
    } catch(Exception readEx) { 
        string msg = readEx.Message; 
    } finally { 
        if(_dr != null) _dr.Close(); 
        if(_conn.State == ConnectionState.Open) _conn.Close(); 
    } 
}

当我用平板上的“正式”应用同步时,服务器端的zumero.log表记录的错误码是244,并且向平板发送了210字节的数据。客户端捕获到的详细ZumeroException如下:

Error 500 (sglib)[ZSS 3.3.0.4342 + Android SQLite (libe_sqlite3.so)3.46.1]: Error -1 (mssql)[3.2.1.4172]: {"diag":[{"SQL_DIAG_MESSAGE_TEXT":"[Microsoft][SQL Server Native Client 11.0][SQL Server]Impossibile eseguire il commit della transazione corrente. Tale transazione non è inoltre in grado di supportare le operazioni che implicano la scrittura nel file di log. Eseguire il rollback della transazione.","SQL_DIAG_NATIVE":3930,"SQL_DIAG_SQLSTATE":"42000","SQL_DIAG_SS_MSGSTATE":1,"SQL_DIAG_SS_SEVERITY":16},{"SQL_DIAG_MESSAGE_TEXT":"[Microsoft][SQL Server Native Client 11.0][SQL Server]L'istruzione è stata interrotta.","SQL_DIAG_NATIVE":3621,"SQL_DIAG_SQLSTATE":"01000","SQL_DIAG_SS_MSGSTATE":1,"SQL_DIAG_SS_SEVERITY":0}],"SQLRETURN":-1} src\core\sg\sg_mssql.c:338 src\core\sg\sg_mssql.c:515 src\core\server\zum_db_mssql.c:13480 src\core\server\zum_respond.c:85 src\core\server\zum_respond.c:3301 src\servers\iis\main.cpp:840 src\servers\iis\main.cpp:1672 src/core/client/zum_sync.c:8118 src/core/client/zum_sync.c:12545 src/core/client/zum_sync.c:13016 src/core/client/zum_sync.c:13527

主要的区别在于:平板应用用的是一个在多个Activity间共享的静态连接,而测试程序每次都会重新创建连接。为了排除后台运行程序的干扰,我临时修改了正式应用,让它从启动到第一次同步之间不打开任何连接,但问题还是存在。

当前安装的NuGet包是:Zumero v3.3.0.4342和Microsoft.Data.Sqlite v9.0.5。

我的客户之前暂时搁置了这个问题,主要是因为我们当时在测试另一个必须在夏季前上线的应用。而且他的平板有时候能同步成功,但只有在当天第一次启动应用的时候才行;而我的测试平板哪怕是第一次启动也同步失败。

现在我必须找到解决方案,希望这些详细的异常信息能帮上忙。谢谢!

Rodolfo.

另外补充一下,服务器运行的是v3.2.1.4172版本。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 08:05:29