Esta es el arreglo más completa que te podemos compartir, pero mírala pausadamente y valora si se adapta a tu trabajo.
Solución:
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 según sea necesario. Determiné que colid
devuelto en SqlException no se basa en cero, por lo que debe restar 1 para obtener el valor. Después de eso, se utiliza como índice de la _sortedColumnMappings
ArrayList de la instancia de SqlBulkCopy, no el índice de las asignaciones de columna que se agregaron a la instancia de SqlBulkCopy. Una cosa a tener en cuenta es que SqlBulkCopy se detendrá en el primer error recibido, por lo que puede que este 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"))
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 una o más celdas de datos que exceden la longitud del tipo de datos de la columna de datos en la base de datos.
Verifique los datos en Excel. También verifique los datos en Excel para que su formato cumpla con el esquema de la tabla de la base de datos.
Para evitar esto, intente exceder la longitud de datos del string tipo de datos en la tabla de la base de datos.
Espero que esto ayude.
Me enfrenté a un tipo de problema similar al pasar un string a la tabla de la base de datos usando la opción SQL BulkCopy. El string que pasaba era de 3 caracteres, mientras que la longitud de la columna de destino era varchar(20)
. Intenté recortar el string antes de insertarlo en la base de datos usando Trim()
función para comprobar si el problema se debe a algún espacio (inicial y final) en el string. Después de recortar el string, funcionó bien.
Puedes probar text.Trim()
Si te gusta la invitación, puedes dejar un escrito acerca de qué te ha impresionado de esta sección.