pyme por peru internet cuenta creditos credit credimas compras banco banca c# .net sql-server database sql-server-2005

c# - por - credimas



Se recibió una longitud de columna no válida del cliente bcp para colid 6 (5)

Quiero cargar de forma masiva los datos del archivo csv al servidor SQL 2005 desde el código c #, pero me encuentro con el siguiente error:

Se recibió una longitud de columna no válida del cliente bcp para colid 6.

cuando la copia masiva escribe en el servidor de base de datos


Gran pieza de código, gracias por compartir!

Terminé usando la reflexión para obtener el DataMemberName real para devolver a un cliente en un error (estoy usando el ahorro masivo en un servicio WCF). Esperemos que alguien más encuentre cómo lo hice útil.

static string GetDataMemberName(string colName, object t) { foreach(PropertyInfo propertyInfo in t.GetType().GetProperties()) { if (propertyInfo.CanRead) { if (propertyInfo.Name == colName) { var attributes = propertyInfo.GetCustomAttributes(typeof(DataMemberAttribute), false).FirstOrDefault() as DataMemberAttribute; if (attributes != null && !string.IsNullOrEmpty(attributes.Name)) return attributes.Name; return colName; } } } return colName; }


Me enfrenté a un tipo de problema similar al pasar una cadena a la tabla de la base de datos utilizando la opción SQL BulkCopy. La cadena que estaba pasando era de 3 caracteres, mientras que la longitud de la columna de destino era varchar(20) . Intenté recortar la cadena antes de insertarla en la base de datos utilizando la función Trim() para verificar si el problema se debió a algún espacio (inicial y final) en la cadena. Después de cortar la cuerda, funcionó bien.

Puedes probar text.Trim()


Sé que esta publicación es antigua, pero me encontré con el mismo problema y, finalmente, encontré una solución para determinar qué columna estaba causando el problema e informarlo cuando sea necesario. Finalmente me di cuenta de que el colid que se devuelve en la excepción SqlException no está basado en cero, por lo que debe restar 1 para obtener el valor. Después de eso, se usa como el índice de la ArrayList _sortedColumnMappings de la instancia SqlBulkCopy, no el índice de las asignaciones de columnas que se agregaron a la instancia SqlBulkCopy. Una cosa a tener en cuenta es que SqlBulkCopy se detendrá en el primer error recibido, por lo que puede que no sea el único problema, pero al menos ayuda a resolverlo.

try { bulkCopy.WriteToServer(importTable); sqlTran.Commit(); } catch (SqlException ex) { if (ex.Message.Contains("Received an invalid column length from the bcp client for colid")) { string pattern = @"/d+"; Match match = Regex.Match(ex.Message.ToString(), pattern); var index = Convert.ToInt32(match.Value) -1; FieldInfo fi = typeof(SqlBulkCopy).GetField("_sortedColumnMappings", BindingFlags.NonPublic | BindingFlags.Instance); var sortedColumns = fi.GetValue(bulkCopy); var items = (Object[])sortedColumns.GetType().GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(sortedColumns); FieldInfo itemdata = items[index].GetType().GetField("_metadata", BindingFlags.NonPublic | BindingFlags.Instance); var metadata = itemdata.GetValue(items[index]); var column = metadata.GetType().GetField("column", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata); var length = metadata.GetType().GetField("length", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata); throw new DataFormatException(String.Format("Column: {0} contains data with a length greater than: {1}", column, length)); } throw; }


Una de las columnas de datos en Excel (Id. De columna 6) tiene uno o más datos de celda que exceden la longitud del tipo de datos de columna de datos en la base de datos.

Verificar los datos en excel. Verifique también los datos en Excel para que su formato cumpla con el esquema de la tabla de la base de datos.

Para evitar esto, intente sobrepasar la longitud de los datos del tipo de datos de cadena en la tabla de la base de datos.

Espero que esto ayude.


Verifique el tamaño de las columnas en la tabla que está haciendo inserción / copia masiva. Es posible que las columnas varchar u otras columnas de cadena deban ampliarse o que se recorte el valor que está insertando. El orden de las columnas también debe ser el mismo que en la tabla.

por ejemplo, aumentar el tamaño de la columna varchar 30 a 50 =>

ALTER TABLE [dbo]. [TableName] ALTER COLUMN [ColumnName] Varchar (50)