Here is what is in the documentation for Caché:

Disable Query Timeout — Optional. If selected, causes the ODBC client driver to ignore the value of the ODBC query timeout setting.

The ODBC query timeout setting specifies how long a client should wait for a specific operation to finish. If an operation does not finish within the specified time, it is automatically cancelled. The ODBC API provides functions to set this timeout value programmatically. Some ODBC applications, however, hard-code this value. If you are using an ODBC application that does not allow you to set the timeout value and the timeout value is too small, you can use the Disable Query Timeout option to disable timeouts.

java.sql Exceptions
The following exceptions are listed here for completeness, but are not required and are never used:
...
SQLTimeoutException
...

You can empirically verify all your considerations by calling a custom stored procedure from Microsoft SQL Server, for example:

Class dc.a Abstract ]
{

Query DbgSqlProc(
  qMaxRows 10,
  qTimeWait As %SmallInt 3As %Query(ROWSPEC "nrow:%Integer,name:%String") [ SqlProc ]
{
}

ClassMethod DbgSqlProcExecute(
  ByRef qHandle As %Binary,
  qMaxRows 10,
  qTimeWait As %SmallInt 3As %Status
{
  #define Log(%s) Set ^dbgSqlProc(qHandle("id"),%s)=$ZDateTime($NOW(),1,1,6)
  
  Set qHandle("id")=$Increment(^dbgSqlProc)
  Set qHandle("qMaxRows")=qMaxRows
  Set qHandle("qTimeWait")=qTimeWait

  $$$Log("1_Execute")

  For i=1:1:qMaxRows Set qHandle(i)=$ListBuild(i,"name"_i)
  Set qHandle=0
  
  ; Hang qHandle("qTimeWait")*3
  
  Quit $$$OK
}

ClassMethod DbgSqlProcFetch(
  ByRef qHandle As %Binary,
  ByRef Row As %List,
  ByRef AtEnd As %Integer 0As %Status PlaceAfter = DbgSqlProcExecute ]
{
  $$$Log("2_Fetch")
  
  If qHandle>qHandle("qMaxRows"{
    Set Row=""
    Set AtEnd=1
  }else{
    Set Row=qHandle($Increment(qHandle))
    Hang qHandle("qTimeWait")
  }
  Quit $$$OK
}

ClassMethod DbgSqlProcClose(ByRef qHandle As %BinaryAs %Status PlaceAfter = DbgSqlProcExecute ]
{
  $$$Log("3_Close")
  
  Quit $$$OK
}

}

Example of a call: select * from dc.a_DbgSqlProc(11,5)

See Customized Class Queries

 
dc.onetomany.PKG
USER>##class(dc.onetomany.companies).Test()
17000 <- 17000
7000 <- 7000
current ID = 111
current ID = 500
current ID = 501

Interestingly, if I try your examples, I can recreate the ambiguity error, but then get an error when attempting to specify the full param specification

What is your version of IRIS and .NET?
I have IRIS 2025.3CE and .NET 8.0/Framework 4.6.2 - the examples above work flawlessly and give respectively 1, 0, 1 as indicated in the comments.

This is also possible:

USER>gw $System.external.getDotNetGateway()
USER>gw.invoke("System.Convert","ToBoolean(System.UInt64)",123)
1
USER>

Since you manage the ID yourself, in the general case it may not necessarily be a simple counter, but, for example, a Fibonacci sequence.
If the source code of the class or table is available, it is better to see how the ID is generated in it. If there is no source code, and you are sure that this is a simple counter, then in my opinion it would be easier to make a standard ID and let IRIS manage it itself.

    var irisReference = new IRISReference("");
    iris.ClassMethodStatusCode("TestClasses.TestClass", "Method1", irisReference);
    var pReturn = (IRISObject)irisReference.value;
    var list = (IRISObject)pReturn.Get("Entries");
    for (var i = 1; i <= list.InvokeLong("Count"); i++)
    {
        var entry = (IRISObject)list.InvokeObject("GetAt", i);
        Console.WriteLine(entry.GetString("Username"));

    }

gateway.new() calls a constructor, but the System.Convert class has no constructors.

To call a static method, use gateway.invoke(), but keep in mind that if you call the following code, an error will occur "Unable to resolve method overloading ambiguity":

write netGate.invoke("System.Convert","ToBoolean",123)

To avoid it, specify the name of the method with the full specification of the parameters, for example:

gw $System.external.getDotNetGateway()
gw.invoke("System.Convert","ToBoolean(int)",123),! ; -> 1
gw.invoke("System.Convert","ToBoolean(string)","false"),! ; -> 0
gw.invoke("System.Convert","ToBoolean(string)","true"),! ; -> 1

PS: see Mapping Specification (pay special attention to the sections "Overloaded Methods" and "Restrictions")

By the way, what do you think this statement does? Note the %OpenId(20) at the end instead of %New(). 

#dim a,b,As Sample.Person ##class(Sample.Person).%OpenId(20)

Confusing. How about this statement?

#dim a,b,As Sample.Company ##class(Sample.Person).%New()

Do you get 3 companies or 3 persons? Does it try to "cast" persons as companies? Do you get an error at compile time or run time? Would it work if Sample.Company extends Sample.Person? More confusion...

There is no confusion.

Here's another example where the class may not even exist and yet the code compiles without errors and according to the documentation.

test.MAC

#dim a,b,As %Boolean ##class(bla.bla).%OpenId(20)
#dim a,b,As bla.bla.bla123 ##class(bla.bla).%OpenId(20)

--> test.INT

Set (a,b,c)=##class(bla.bla).%OpenId(20)
Set a=##class(bla.bla).%OpenId(20),b=##class(bla.bla).%OpenId(20),c=##class(bla.bla).%OpenId(20)

The only thing is that in this case Studio Assist will not work.

IRIS 2025.3.CE

ClassMethod test() [ Language python ]
{
  import iris

  ns = iris.system.Process.NameSpace()
  try:
    iris.system.Process.SetNamespace('%SYS')

    passenger = iris.SYS.Stats.Dashboard.Sample()
    print(passenger.GloRefsPerSec)
  finally:
    iris.system.Process.SetNamespace(ns)
}

PS: Do I need a separate python iris connection for each Namespace?

  • For each alphabetic character, determine its zero-based index in the lowercase alphabet (a-z).
  • Preserve non-alphabetic characters unchanged.

For clarify: does alphabetical characters include only the English letters a-z, A-Z, or all Unicode characters including "ªµºÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéyêëìíîïðñtóôõöøùúûüýþÿ" ?

What should be the correct result for the string "Hello World µÝ Привет Мир!" ?

My current code size is 74 (where alphabetical characters only a-z,A-Z).

 
size = 74

"Hello World µÝ Привет Мир!" -> "риМ тевирП Ýµ 11100 01101!"

PS: why is the correct result in the testNumbers method 321 and not 213?