none
Pasar parámetro de tipo DataTable a SP genera excepción: "Los datos de cadena o binarios se truncarían. Se terminó la instrucción." RRS feed

  • Pregunta

  • Buenas noches, les explico el error que me está dando la siguiente consulta. Implementé un procedimiento almacenado que recibe un parámetro de tipo tabla. El procedimiento almacenado es básicamente un insert a otra tabla con los datos que vienen en dicho parámetro(tipo tabla).

    Sin embargo cuando hago el "ExecuteSqlCommand" me salta este error: "Los datos de cadena o binarios se truncarían. Se terminó la instrucción."

    El método va algo así:

    public void Insert(List<object> objs)
    {
    var dt = new DataTable();
    //Agrego las columnas

    foreach (object obj in objs)
    {
    //Agrego filas a dt
    dt.Rows.Add(obj.campo_1, obj.campo_n);
    }

    var parametro = new SqlParameter("@nombre_de_parametro_en_sp", SqlDbType.Structured)
    {
    Value = dt,
    TypeName = "[dbo].[tipo_de_dato_en_bd]"
    };

    using (var context = new MiContexto())
    {
        context.Database.ExecuteSqlCommand("EXEC nombre_de_sp_en_bd @nombre_de_parametro_en_sp", parametro);
    }
    }

    Lo curioso es que al implementar un insert individual por cada registro de la lista no da ningún error.

    public void Insert(List<object> objs)
    {
    using (var context = new MiContexto())
    {
    foreach (object obj in objs)
    {
    context.sp_insert(obj.campo_1, obj.campo_n);
    }
    }
    }

    Quisier implementar la primer opción dado que las listas pueden traer miles de registros y me parece que es la opción más óptima.

    Cualquier consejo será muy bien recibido.

    Muchas gracias por su ayuda.



    • Editado csijindioy martes, 26 de noviembre de 2019 20:20
    martes, 26 de noviembre de 2019 1:39

Todas las respuestas