public string actualizarprivilegios(DatosUsuario objusuario, List <DatosUsuario> Detalle)
        {
            string        msg    = "OK";
            SqlConnection sqlcon = new SqlConnection();

            sqlcon.ConnectionString = Conexion.conexion;
            sqlcon.Open();
            SqlTransaction sqltra = sqlcon.BeginTransaction();

            try
            {
                // primero eliminar privilegio y codigo de procesos para luego agregarlos nuevamente

                SqlCommand sqlcmd = ProcAlmacenado.CrearProc(sqlcon, "SP_USUARIO", sqltra);

                SqlParameter parModo = ProcAlmacenado.asignarParametros("@modo", SqlDbType.Int, 12);
                sqlcmd.Parameters.Add(parModo);

                SqlParameter parCodproceso = ProcAlmacenado.asignarParametros("@codproceso", SqlDbType.Int, objusuario.codmodulo);
                sqlcmd.Parameters.Add(parCodproceso);


                SqlParameter parRoles = ProcAlmacenado.asignarParametros("@idroles", SqlDbType.Int, objusuario.idroles);
                sqlcmd.Parameters.Add(parRoles);

                msg = sqlcmd.ExecuteNonQuery() == 1 ? "OK" : "NO se ingreso el registro";

                foreach (DatosUsuario det in Detalle)
                {
                    SqlCommand sqlcmd2 = ProcAlmacenado.CrearProc(sqlcon, "SP_USUARIO", sqltra);

                    SqlParameter parModo2 = ProcAlmacenado.asignarParametros("@modo", SqlDbType.Int, 13);
                    sqlcmd2.Parameters.Add(parModo2);

                    SqlParameter parCodigo = ProcAlmacenado.asignarParametros("@codSP", SqlDbType.Int, det.codigo);
                    sqlcmd2.Parameters.Add(parCodigo);

                    SqlParameter parIdroles = ProcAlmacenado.asignarParametros("@idroles", SqlDbType.Int, objusuario.idroles);
                    sqlcmd2.Parameters.Add(parIdroles);

                    SqlParameter parEstado = ProcAlmacenado.asignarParametros("@estado", SqlDbType.Bit, det.estado);
                    sqlcmd2.Parameters.Add(parEstado);

                    SqlParameter parCodsubproceso = ProcAlmacenado.asignarParametros("@codsubproceso", SqlDbType.Int, det.codsubproceso);
                    sqlcmd2.Parameters.Add(parCodsubproceso);


                    SqlParameter parCodproceso2 = ProcAlmacenado.asignarParametros("@codproceso", SqlDbType.Int, det.codproceso);
                    sqlcmd2.Parameters.Add(parCodproceso2);

                    msg = sqlcmd2.ExecuteNonQuery() == 1 ? "OK" : "NO se ingreso el registro";
                }
            }
            catch (Exception ex)
            {
                msg = ex.Message;
            }

            if (msg.Equals("OK"))
            {
                sqltra.Commit();
            }
            else
            {
                sqltra.Rollback();
            }
            sqlcon.Close();
            return(msg);
        }