sábado, 16 de dezembro de 2023

instalar o Report Viewer no Visual Studio

 Para instalar o Report Viewer no Visual Studio 2019, siga os seguintes passos:

  1. Abra o Visual Studio 2019 e crie um projeto simples utilizando a plataforma Windows Forms.
  2. No menu superior, localize o item “Extensões/Gerenciar Extensões”.
  3. Clique na Aba “Online” e na caixa de pesquisa digite “rdlc”.
  4. Clique no primeiro item da pesquisa, que será o “Microsoft RDLC Report Designer”.
  5. Clique no botão “Download”.
  6. As alterações serão agendadas e começarão quando o Visual Studio for reiniciado.
  7. Para conferir se tudo ocorreu bem, clique com o botão direito sobre o projeto escolhendo “Adicionar/Novo Item …”. Na caixa pesquisar procure por “Relatório”, então iremos nos deparar com o item com extensão “.rdlc”.
  8. Para instalar as referências, acesse o item de menu “Ferramentas/Gerenciador de Pacotes do Nuget/Gerenciar pacotes do Nuget para a Solução…” e na caixa de pesquisa insira “reportviewercontrol”.
  9. Escolha a segunda opção “Microsoft.ReportingServices.ReportViewerControl.Winforms” e clique no botão “Instalar”.
  10. Ao término da instalação, será aberta uma tela contendo alguns informativos de como utilizar estas referências.

Espero ter ajudado! 😊

sexta-feira, 15 de dezembro de 2023

ASP.NET Core - Definir cultura para o formato brasileiro

 using System;

using System.Collections.Generic;

using System.Globalization;

using System.Linq;

using System.Threading.Tasks;

using System.Windows.Forms;


namespace Reports_Design

{

    internal static class Program

    {

        /// <summary>

        /// Ponto de entrada principal para o aplicativo.

        /// </summary>

        [STAThread]

        static void Main()

        {

            // Define a cultura padrão como "pt-BR"

            CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-BR");


            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new Form1());

        }

    }

}


terça-feira, 17 de outubro de 2023

Corrigir o erro: InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.RoleManager`1[Microsoft.AspNetCore.Identity.IdentityRole]' while attempting to activate

 builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)

    .AddRoles<IdentityRole>() // Corrigir o erro: InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.RoleManager`1[Microsoft.AspNetCore.Identity.IdentityRole]' while attempting to activate. Adicione esta linha

    .AddEntityFrameworkStores<ApplicationDbContext>();

quarta-feira, 23 de agosto de 2023

Vírus de smartphones

De acordo com um artigo da TyC Sports, o “malware Trojan” é um dos vírus mais recentes a se disfarçar de aplicativo. Esse malware inclui qualquer código, programa ou vírus incorporado no software de aplicativo para se assemelhar a uma parte segura da plataforma para invadir dispositivos e obter dados pessoais.

A empresa de segurança cibernética Kaspersky explica que o vírus “Fleckpe” é um tipo específico de malware tipo “cavalo de tróia”. Como resultado de sua natureza enganosa, esse golpe comprometeu 620.000 dispositivos móveis por meio de aplicativos. A Kaspersky define esse tipo de vírus como parte dos “Trojans de assinatura” que infectam smartphones agindo como uma assinatura de serviços de aplicativos específicos.

Assim que um usuário baixa o aplicativo e concede acesso aos seus dados pessoais, esses vírus invadem o dispositivo. O malware verifica as informações do usuário, como galerias de fotos, notificações e detalhes de localização, até detectar informações que permitem pagamentos online. A TyC Sports confirma que este vírus foi descoberto em 6 aplicativos relacionados à edição e design de fotos: Gif Camera Editor Pro, Night Cam Rea Pro, Microclip Video Editor, Photo Editor Toolbox, H4KS Wallpaper e Beauty Camera Plus Photo Editor.

Com isso em mente, medidas proativas de segurança cibernética são essenciais para proteger os dados pessoais dos usuários. A proteção mais direta contra golpes cibernéticos é baixar antimalware em smartphones. A instalação das atualizações mais recentes do sistema operacional é outro método para fortalecer a segurança dos dados pessoais. Os usuários também devem evitar se conectar a Wi-Fi público, pois a Verizon recomenda o uso de pontos de acesso móveis pessoais. Isso também se aplica a terminais de carregamento públicos que podem ser programados para hackear dispositivos móveis. Como o malware tem como alvo aplicativos específicos, os usuários devem sempre instalar aplicativos de lojas oficiais e revisar todas as políticas de privacidade.



TIPO DE DADOS - FLOAT X DOUBLE

  1. Tipos Reais (ou tipos de ponto flutuante) representam valores com um parte fracionária

  2. Tipo

    Tamanho em bytes

    Valor Positivo Mínimo

    Valor Máximo

    C++ Análogo

    float

    4

    1.175494351e-38

    3.402823466e+38

    float

    double

    8

    2.2250738585072014e-308

    1.7976931348623158e+308

    double


  3. A diferença entre o float e o double é a precisão, ou seja, o quanto varia, o quanto consegue expressar um valor próximo do real, é o número de casas decimais que ele consegue suportar.

    Esses tipos são chamados de ponto flutuante binários.


    1. O float normalmente possui 32 bits para representar o expoente e a mantissa, além do sinal. Dá pra representar muitos números, mas por sua natureza binária não consegue representar todos os números, então ele representa o que está mais próximo do que se deseja. Ele tem 24 dígitos de precisão e por isso é chamado de simples precisão.

    Tipo de número real float ocupa 32 bits (1 bit de sinal, 8 bits de expoente e 23 bits de mantissa).


    2. O double geralmente é representado por 64 bits, então consegue bem mais precisão, mas ainda não a exatidão já que a forma de representação também é binária. Tem 53 dígitos de precisão e é chamado de dupla precisão.

    Tipo de número real double ocupa 64 bits (1 bit de sinal, 11 bits de expoente e 52 bits de mantissa).





terça-feira, 15 de agosto de 2023

TÓPICOS DA ATA DE REUNIÃO

 

Tópicos da ata de reunião

Abaixo listamos os principais tópicos que toda ata de reunião deve conter, ou seja, são informações obrigatórias em uma ata.

· Data e local da reunião

· Partes interessadas

· Objetivos da reunião

· Assuntos discutidos

· Ações a serem tomadas

Data e local da reunião

Aqui você deve informar a data e o local onde a reunião foi realizada, se possível é recomendado que seja informada a hora de início e término da reunião.

Partes interessadas

São todos os participantes da reunião, incluindo aqueles que participam apenas como ouvintes (opcional). Deve ser documentado nome completo e cargo ou função de cada participante.

Objetivos da reunião

Esta sessão da ata é destinada à registrar de forma sucinta e objetiva a pauta geral da reunião. 

Assuntos discutidos

Nesta sessão você deve registrar os tópicos que foram objeto de discussão durante a realização da reunião de forma bem objetiva.

Ações a serem tomadas

Neste tópico você deve informar quais as ações decididas durante a reunião para cada um dos objetivos anteriores.


Espero ter ajudado.

domingo, 13 de agosto de 2023

INSERT INTO COM VÁRIOS SELECTsInsert into ... values ( SELECT ... FROM ... )


INSERT INTO ... VALUES ( SELECT ... FROM ... )


INSERT INTO SELECT

A instrução copia dados de uma tabela e insere em outra tabela.

A declaração exige que os tipos de dados nas tabelas de origem e de destino correspondem


Sintaxe:

INSERT INTO table2
SELECT * FROM table1
WHERE condition;


Copiar algumas colunas

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;


Exemplo:

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;


Mas, se desejar você pode usar vários selects:

SET DATEFORMAT dmy

DROP TABLE IF EXISTS #tmpExtatistica;

CREATE TABLE #tmpExtatistica
(

    totalCB22 smallint null,
    totalCB21 smallint null,
    totalCB58 smallint null
)

INSERT INTO #tmpExtatistica (totalCB22, totalCB21, totalCB58) --, totalmes, media)
VALUES (

        (SELECT

            Count(Colpo_DigitacaoLaudo10) as totalCB22

            FROM colpo_DigitacaoLaudo

            WHERE Colpo_DigitacaoLaudoDataCadastro BETWEEN '01/01/2023' and '30/08/2023'

                AND Colpo_DigitacaoLaudo10 LIKE '%CB22%'

        )
        ,
        (SELECT

            Count(Colpo_DigitacaoLaudo10) as totalCB21

            FROM colpo_DigitacaoLaudo

            WHERE Colpo_DigitacaoLaudoDataCadastro BETWEEN '01/01/2023' and '30/08/2023'

                AND Colpo_DigitacaoLaudo10 LIKE '%CB21%'

        )  
        ,
        (SELECT

            Count(Colpo_DigitacaoLaudo10) as totalCB58

            FROM colpo_DigitacaoLaudo

            WHERE Colpo_DigitacaoLaudoDataCadastro BETWEEN '01/01/2023' and '30/08/2023'

                AND Colpo_DigitacaoLaudo10 LIKE '%CB58%'

        )  


)  

SELECT *
FROM #tmpExtatistica


Espero ter ajudado e até a próxima






quinta-feira, 3 de agosto de 2023

O QUE É .NET CORE?

.NET Core é um framework gratuito e de código aberto para construir muitos tipos diferentes de aplicativos. 

É uma reimplementação do .NET Framework para ser mais leve, modular e flexível. É desenvolvido principalmente pela Microsoft e lançado com a Licença MIT. 

O .NET Core é um framework multiplataforma que roda no Windows, Linux e macOS. 


O .NET Core oferece muitos benefícios, como:


  • É multiplataforma e pode ser executado no Windows, Linux e macOS 

  • É mais leve e modular em comparação com o .NET Framework 

  • Oferece melhor desempenho em comparação com o .NET Framework 

  • Suporta vários idiomas de programação 

  • É de código aberto e tem uma comunidade ativa 


Oferece suporte para desenvolvimento de aplicativos em nuvem, aplicativos nativos em nuvem, aplicativos de console, funções sem servidor na nuvem, aplicativos da web, APIs da web e microsserviços, aplicativos de cliente multiplataforma, aplicativos de desktop, jogos, aplicativos móveis, aplicativos do Windows, aplicativos do Windows Desktop, Windows Forms, Windows WPF, Plataforma Universal do Windows (UWP), serviços do Windows e outros tipos de aplicativos 

Além disso, o .NET Core é uma escolha popular para desenvolvedores que desejam criar aplicativos modernos e escaláveis. Ele oferece uma ampla gama de recursos e ferramentas para ajudar os desenvolvedores a criar aplicativos rapidamente. O .NET Core também é usado por muitas empresas em todo o mundo para criar aplicativos empresariais críticos. Espero que isso ajude!

sexta-feira, 21 de julho de 2023

SQL SERVER - TABELA NÃO PODE SER RECRIADA

 A solução é simples, apenas siga as imagens. Inicie abrindo a janela Opções do menu Ferramenta




Em seguida, desmarque a caixa de seleção Evitar salvar alterações que exijam recriação de tabela


Para finalizar, salve sua tabela. A mensagem, não será mais exibida.




Espero ter ajudado e até a próxima.




quarta-feira, 26 de abril de 2023

SQL DATEDIFF

Se você deseja retornar o número de dias, anos, meses ou outro valor desejado. Utilize a funçao DATEDIFF. 

Essa função retorna a contagem dos limites especificados de datepart entre os parâmetros especificados startdate e enddate.


Sintaxe:

DATEDIFF ( datepart , startdate , enddate )


Nota:

DATEDIFF relata a diferença entre startdate e enddate. Unidades de datepart usadas com frequência incluem month ou second.

O valor de datepart não pode ser especificado em uma variável, nem como uma cadeia de caracteres entre aspas, como 'month'.

O valor de datepart não pode ser especificado em uma variável, nem como uma cadeia de caracteres entre aspas, como 'month'.

Use anos de quatro dígitos para evitar ambiguidade.

O tipo de retorno e um INT.


Tabela com todos os valores válidos de datepart

Nome do datepartAbreviação do datepart
yeary, yy, yyyy
quarterqq, q
monthmm, m
dayofyeardy
daydd, d
weekwk, ww
hourhh
minutemi, n
secondss, s
millisecondms
microsecondmcs
nanosecondns

Uma expressão que pode resolver um dos seguintes valores:

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time


Exemplos com datepart


SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(quarter,     '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(month,       '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(dayofyear,   '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(day,         '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(week,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(hour,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(minute,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(second,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(microsecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');



sexta-feira, 14 de abril de 2023

IdentityUser - Exemplo Prático

 É uma biblioteca de gerenciamento de usuários da Microsoft para ASP.NET. Ela é chamada de Identidade (Identity) ASP.NET. Ela contém recursos, incluindo hash de senha, validação de senha, armazenamento de usuários e gerenciamento de reivindicações. Ela normalmente inclui alguns recursos básicos de autenticação, como cookies e autenticação multifator. Ela pode até mesmo introduzir sua própria interface de usuário em alguns casos.

Todas as estruturas, incluindo MVC ASP.NET, Web Forms e Web Pages, podem usar o ASP.NET Identity. As informações do usuário são armazenadas em um banco de dados por padrão no ASP.NET Identity. Também é viável armazenar dados em uma variedade de provedores de armazenamento, dependendo das necessidades do aplicativo. SharePoint, serviços de tabela do Azure e outras fontes de dados (exemplos de provedores de dados).

No ASP.NET Identity, a autorização baseada em função também é muito significativa. Agora podemos definir facilmente funções como "Administrador", "Cliente" e assim por diante, o que nos permite atribuir usuários a essas funções e restringir seu acesso a algumas áreas do programa.

O Identificador de ASP.NET é um divisor de águas, pois introduz a Autenticação de Dois Fatores em seu aplicativo Web.

Porém, ela possui um conjunto muito limitado de propriedades, mas é possivel extender. É isso que você irá aprender agora.

 

public class IdentityUser<TKeywhere TKey : IEquatable<TKey>

{

    public IdentityUser() { }

    public IdentityUser(string userName) : this()

    {

        UserName = userName;

    }

    [PersonalData]

    public virtual TKey Id { getset; }

    [ProtectedPersonalData]

    public virtual string UserName { getset; }

    public virtual string NormalizedUserName { getset; }

    [ProtectedPersonalData]

    public virtual string Email { getset; }

    public virtual string NormalizedEmail { getset; }

    [PersonalData]

    public virtual bool EmailConfirmed { getset; }

    public virtual string PasswordHash { getset; }

    public virtual string SecurityStamp { getset; }

    public virtual string ConcurrencyStamp { getset; } = Guid.NewGuid().ToString();

    [ProtectedPersonalData]

    public virtual string PhoneNumber { getset; }

    [PersonalData]

    public virtual bool PhoneNumberConfirmed { getset; }

    [PersonalData]

    public virtual bool TwoFactorEnabled { getset; }

    public virtual DateTimeOffset? LockoutEnd { getset; }

    public virtual bool LockoutEnabled { getset; }

    public virtual int AccessFailedCount { getset; }

    public override string ToString()

        => UserName;

}

  

Estender IdentityUser Class

Você pode nomear a classe que estende a classe IdentityUser como quiser, mas é costume nomeá-la como ApplicationUser. No exemplo abaixo, a classe ApplicationUser  estende a classe IdentityUser .

 public class ApplicationUser : IdentityUser

{

    public string City { getset; }

}

Para encontre todas as referências da classe IdentityUser e substitui-la por nossa classe personalizada ApplicationUser , clique com o botão direito do mouse na classe IdentityUser e, em seguida, selecionar "Localizar todas as referências" no menu de contexto. Navegue até cada referência na lista e substitua a classe IdentityUser pela classe ApplicationUser.

 



Especifique a classe ApplicationUser como o argumento genérico para a classe IdentityDbContext. É assim que a classe IdentityDbContext sabe que precisa trabalhar com nossa classe de usuário personalizada (neste caso, a classe ApplicationUser) em vez da classeIdentityUser interna padrão.

public class AppDbContext : IdentityDbContext<ApplicationUser>

{

    public AppDbContext(DbContextOptions<AppDbContext> options)

        : base(options)

    { }

 

    public DbSet<Employee> Employees { getset; }

 

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

        base.OnModelCreating(modelBuilder);

        modelBuilder.Seed();

    }

}

  

Gerar uma nova migração para adicionar colunas à tabela AspNetUsers

Add-Migration Extend_IdentityUser, este comando gera o código de migração necessário para adicionar a coluna Cidade à tabela AspNetUsers.

 

Extend_IdentityUser de classe parcial pública : Migração

{

protected override void Up(MigrationBuilder migrationBuilder)

    {

migrationBuilder.AddColumn<string>(

nome: "Cidade",

tabela: "AspNetUsers",

anulável: verdadeiro);

    }

 

protected override void Down(MigrationBuilder migrationBuilder)

    {

migrationBuilder.DropColumn(

nome: "Cidade",

tabela: "AspNetUsers");

    }

}

 

Em seguida, aplique a migração ao banco de dados usando o seguinte comando: Update-Database

 

 

Estendendo IdentityUser - Add-Migration Não está funcionando

Se a classe ApplicationUser (a classe que estende a classe IdentityUser) não for especificada como o argumento genérico para a classe IdentityDbContext, o comando Add-Migration não funcionará. Ele não gera o código de migração necessário para adicionar as colunas adicionais à tabela de identidade AspNetUsers.Para corrigir isso, especifique a classe ApplicationUser como o argumento genérico para a classe IdentityDbContext.

 

public class AppDbContext : IdentityDbContext<ApplicationUser>

{

    public AppDbContext(DbContextOptions<AppDbContext> options)

        : base(options)

    { }

 

    public DbSet<Employee> Employees { getset; }

 

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

        base.OnModelCreating(modelBuilder);

        modelBuilder.Seed();

    }

}

 

Se você obtiver a seguinte exceção, a causa mais provável é em algum lugar com em seu aplicativo você ainda está usando classe IdentityUser em vez da classe ApplicationUser.

 

No service for type 'Microsoft.AspNetCore.Identity.SignInManager`1[Microsoft.AspNetCore.Identity.IdentityUser]' has been registered.

 

No Visual Studio, procure a classe IdentityUser em todo o aplicativo usando CTRL + SHIFT + F

 


 

Substitua a classe IdentityUser pela classe ApplicationUser e execute novamente o projeto.

 

Para poder armazenar dados para a coluna Cidade personalizada na tabela AspNetUsers precisamos alterar

· RegisterViewModel classe

· Registrar Visualização

· Registrar ação no AccountController

 

Classe RegisterViewModel Esta é a classe de modelo para o modo de exibição Register. Modifique-o para incluir a propriedade City.

 

public class RegisterViewModel{

    // Other Properties

    public string City { getset; }

}

 

Register View

inclua um campo para capturar um valor para a Cidade.

 

@model RegisterViewModel

 

@{

    ViewBag.Title = "User Registration";

}

 <h1>User Registration</h1>

 

<div class="row">

    <div class="col-md-12">

        <form method="post">

            <div asp-validation-summary="All" class="text-danger"></div>

            <div class="form-group">

                <label asp-for="Email"></label>

                <input asp-for="Email" class="form-control" />

                <span asp-validation-for="Email" class="text-danger"></span>

            </div>

 

            @*Other Fields*@

 

            <div class="form-group">

                <label asp-for="City"></label>

                <input asp-for="City" class="form-control" />

            </div>

 

            <button type="submit" class="btn btn-primary">Register</button>

        </form>

    </div>

</div>

 

AccountController - Ação de registro

· Preencha a propriedade City da instância ApplicationUser que é passada para o método CreateAsync() da classe UserManager.

· Os dados na instância ApplicationUser são salvos na tabela AspNetUsers pela classe IdentityDbContext.

 

[HttpPost]

[AllowAnonymous]

public async Task<IActionResult> Register(RegisterViewModel model)

{

    if (ModelState.IsValid)

    {

        var user = new ApplicationUser

        {

            UserName = model.Email,

            Email = model.Email,

            City = model.City

        };

 

        var result = await userManager.CreateAsync(user, model.Password);

 

        if (result.Succeeded)

        {

            await signInManager.SignInAsync(user, isPersistent: false);

            return RedirectToAction("index""home");

        }

 

        foreach (var error in result.Errors)

        {

            ModelState.AddModelError(string.Empty, error.Description);

        }

    }

 

    return View(model);

}