Tengo este problema recientemente. Estaba almacenando un mensaje de "estado" en un campo de base de datos nvarcharMAX que tiene 4000 caracteres. Sin embargo, mis mensajes de estado se estaban acumulando y golpeando la excepción.
Pero no fue un caso simple de truncamiento, ya que un truncamiento arbitrario dejaría huérfana a parte de un mensaje de estado, por lo que realmente necesitaba "truncar" en una parte consistente de la cadena.
Resolví el problema convirtiendo la cadena en una matriz de cadenas, eliminando el primer elemento y luego restaurando a una cadena. Aquí está el código ("CurrentStatus" es la cadena que contiene los datos) ...
if (CurrentStatus.Length >= 3750)
{
string[] statusArray = CurrentStatus.Split(new string[] { "." }, StringSplitOptions.None)
.Skip(1).ToArray();
CurrentStatus = (string.Join(".", statusArray))
.Replace("\\r\\n", Environment.NewLine);
}
Espero que ayude a alguien.