this always happens when you call Methods who try to "output" something to a stream other than the internal .net message stream - very much Methods do that to signal status and progress with the terminal.

Fortunately some of them can be forced to behave silent - e.g. For the Method %SYSTEM.OBJ.Load you must provide qspec with argument "/display=none"

hope that helps

my guess was is it should be possible with any (os matching) iris/ cache -

your intention is to remotely access the databases on the nas? if you don't directly mount the database via filesystem (i'm not going to do that, too big fear from latency) you anyway have to have a installed db server on the NAS System to enable advanced features (don't know the name ist it ecp protocoll?)

this is the exception

InterSystems.Data.CacheClient.CacheException (0x80004005): [SQLCODE: <-1>:<Ungültige SQL-Anweisung >]
[Location: <Prepare>]
[%msg: < IN erwartet, <Ende des Ausdrucks> gefunden ^LOCK TABLE Appliance . Setting>]
   bei InterSystems.Data.CacheClient.CacheADOConnection.GetServerError(Int32 rc)
   bei InterSystems.Data.CacheClient.CacheADOConnection.processError(Int32 error, Int32 allowError)
   bei InterSystems.Data.CacheClient.InStream.readHeader(CacheCommand stmt, Int32 stmt_id, Int32 type, Int32 allowError, Boolean requestData)
   bei InterSystems.Data.CacheClient.InStream.readHeader(CacheCommand stmt, Int32 type, Int32 allowError)
   bei InterSystems.Data.CacheClient.CacheCommand.sendDirectUpdateRequest()
   bei InterSystems.Data.CacheClient.CacheCommand.Execute()
   bei InterSystems.Data.CacheClient.CacheCommand.ExecuteReaderObject(CommandBehavior behavior, String method)
   bei InterSystems.Data.CacheClient.CacheCommand.internalExecuteNonQuery()
   bei InterSystems.Data.CacheClient.CacheCommand.ExecuteNonQuery()

yes, that sounds for me like tracing to the database writer - i'm not aware of this functionality in any database at all. 

keep in mind that changing a database field depends on several factors - if you're in a transaction  it might look for the client who's running the update like the field is changed, for others not; If transaction fails the field content will be rolled back.

the "normal" way is just to poll the property regularly to see if it's been changed

[Test]
public void pcg()
{

    using (var conn = ConnectionFactory.CreateConnection() as IRISADOConnection)
    {
        
        conn.ChangeNs("\"USER\"");
        var tc = new TestClass(conn);
        tc.MyProperty = "FuzziGagga";
        tc.Save();
        Assert.NotNull(tc.Id);
        var id = tc.Id.Value;

        tc = new TestClass(conn, id);
        var myProp = tc.MyProperty;
        Assert.True(myProp == "FuzziGagga");

    }
    
}
public class TestClass : IDisposable
{

    public TestClass(IRISADOConnection conn, int idValue)
    {
        iris = IRIS.CreateIRIS(conn);
        proxy = (IRISObject)iris.ClassMethodObject("User.MyClass", "%OpenId", idValue);
        Id = idValue;
    }

    public TestClass(IRISADOConnection conn)
    {
        iris = IRIS.CreateIRIS(conn);
        proxy = (IRISObject)iris.ClassMethodObject("User.MyClass", "%New");
    }

    public void Save()
    {
        int related = 1;
        proxy.InvokeIRISStatusCode("%Save", related);
        if (!Id.HasValue)
        {
            Id = (int)proxy.InvokeLong("%Id");
        }
    }
    
    public string MyProperty
    {
        set
        {
            proxy.Set(nameof(MyProperty), value);
        }
        get
        {
            return proxy.GetString(nameof(MyProperty));
        }
    }

    internal int? Id;
    
    IRISObject proxy;
    IRIS iris;

    public void Dispose()
    {
        iris.Close();
    }
    
}