Tengo este problema recientemente. Estaba almacenando un mensaje de "estado" en un campo nvarcharMAX DB que tiene 4000 caracteres. Sin embargo, mis mensajes de estado se estaban acumulando y tocando la excepción.
Pero no era un caso simple de truncamiento, ya que un truncamiento arbitrario sería una parte huérfana de un mensaje de estado, así 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 restaurándolo a una cadena. Aquí está el código ("CurrentStatus" es la cadena que contiene los datos) ...
if (CurrentStatus.Length >= 3750)
{
// perform some truncation to free up some space.
// Lets get the status messages into an array for processing...
// We use the period as the delimiter, then skip the first item and re-insert into an array.
string[] statusArray = CurrentStatus.Split(new string[] { "." }, StringSplitOptions.None)
.Skip(1).ToArray();
// Next we return the data to a string and replace any escaped returns with proper one.
CurrentStatus = (string.Join(".", statusArray))
.Replace("\\r\\n", Environment.NewLine);
}
espero que ayude a alguien.
¿Dónde estás buscando hacer esto? - en una aplicación Forms o WPF o en un sitio web, ¡por favor brinde más detalles! –
El problema con la mayoría de las soluciones es que usan una cantidad de 'Char's como límite. Lamentablemente, el ancho gráfico puede variar mucho. Y luego están los sustitutos UTF-16, combinando caracteres, ... – CodesInChaos
Esto NO es un duplicado de la pregunta sugerida. Esta es una pregunta muy general, mientras que el duplicado sugerido es una pregunta extremadamente específica. – JasonMArcher