Sua suposição sobre a string de conexão está correta
Você precisa usar o SQL Server Native Client em vez de SQLOLEDB.1 para dar suporte ao
VARCHAR(MAX)
e NVARCHAR(MAX)
tipos de dados, caso contrário, eles serão truncados de volta para os equivalentes SQLOLEDB. Você então quer usar as seguintes definições de parâmetro
'For varchar(max) OUTPUT use;
Call cmd.Parameters.Append(cmd.CreateParameter("@detail", adLongVarChar, adParamOutput, -1, strDetail))
'For nvarchar(max) OUTPUT use;
Call cmd.Parameters.Append(cmd.CreateParameter("@detail", adLongVarWChar, adParamOutput, -1, strDetail))
'** Constants **
' adLongVarChar = 201
' adLongVarWChar = 203
' adParamOutput = 2