Translate

Utilização de Enums C#


Utilização de Enums C#

Um tipo de enumeração (também chamado de uma enumeração ou enum) fornece uma maneira eficiente para definir um conjunto de constantes integrais nomeadas que podem ser atribuídas a um valor. 
Fonte: https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/enumeration-types

A seguir estão as vantagens de usar uma enumeração, em vez de um tipo numérico:
  • Você especifica claramente para o código do cliente quais valores são válidos para a variável.
  • No Visual Studio, o IntelliSense lista os valores definidos.

--------------------------------------------

namespace Proj.OperacaoPadrao.Domain.Enums
{
    public enum TipoOperacaoPadrao : int
    {
        [Description("Baixa do Caixa")]
        BaixaCaixa = 1,

        [Description("Estorno do Caixa")]
        EstornoCaixa =2,
   }
}

-----------------------------------
 throw new NullReferenceException(
 string.Format("A operação padrão '({0}) {1}' não está configurada para a loja{2}.  ",
                    (int)TipoOperacaoPadrao.BaixaCaixa,
                    TipoOperacaoPadrao.BaixaCaixa.GetDescription(),
                    codLoja));
-----------------------------------

public static class EnumExtension
    {
        public static string GetDescription(this Enum value)
        {
            Type type = value.GetType();
            var name = Enum.GetName(type, value);
            if (name == null)
                return "";

            var field = type.GetField(name);
            if (field == null)
                return "";

       var attr = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
            if (attr == null)
                return "";

           return attr.Description;
        }
    }

E agora - colunas de banco de dados calculadas


E agora - colunas de banco de dados calculadas


Inicialmente já vamos ver como descobrir campos calculados na tabela usando as consultas

SELECT  
FROM    sys colunas 
WHERE   is_computed   
       AND  object_id   Object_id ( 'SUA_TABELA' 

SELECT  
FROM    sys computed_columns 
WHERE   object_id   Object_id ( 'SUA_TABELA' ) 

"Uma coluna computada é uma coluna virtual que não está fisicamente armazenada na tabela, a menos que a coluna esteja marcada como PERSISTED. Uma expressão de coluna computada pode usar dados de outras colunas para calcular um valor para a coluna à qual pertence. Você pode especificar uma expressão para uma coluna computada no SQL Server 2017 usando o SQL Server Management Studio ou o Transact-SQL."

https://docs.microsoft.com/pt-br/sql/relational-databases/tables/specify-computed-columns-in-a-table?view=sql-server-2017


CREATE TABLE dbo.Products
   (
      ProductID int IDENTITY (1,1) NOT NULL
      , QtyAvailable smallint
      , UnitPrice money
      , InventoryValue AS QtyAvailable * UnitPrice
    )
;
-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
   VALUES (25, 2.00), (10, 1.5)
;
-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products
;

Como cortar e remover caracteres das cadeias de caracteres


Como cortar e remover caracteres das cadeias de caracteres C#


Se estiver analisando as palavras individuais de uma sentença, você poderá encontrar palavras com espaços em branco em ambas as extremidades da palavra.

Nessa situação, você pode usar um dos métodos de corte na classe System.String para remover qualquer número de espaços ou de outros caracteres de uma posição especificada na cadeia de caracteres.


A tabela a seguir descreve os métodos de corte disponíveis.

https://docs.microsoft.com/pt-br/dotnet/standard/base-types/trimming


 public static string StripIllegalXMLChars(string xmlText)
        {
            //Remove illegal character sequences
            string tmpContents = xmlText;

            //string pattern = String.Empty;
            //switch (XMLVersion)
            //{
            //    case "1.0":
            //        pattern = @"&#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|7F|8[0-46-9A-F]9[0-9A-F]);";
            //        break;
            //    case "1.1":
            //        pattern = @"&#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|[19][0-9A-F]|7F|8[0-46-9A-F]|0?[1-8BCEF]);";
            //        break;
            //    default:
            //        throw new Exception("Error: Invalid XML Version!");
            //}

         

            String pattern = @"&#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|[19][0-9A-F]|7F|8[0-46-9A-F]|0?[1-8BCEF]);";
            /*TESTES
            StringBuilder buffer = new StringBuilder(tmpContents.Length); //Max length
            foreach (char ch in tmpContents)
            {
                UInt16 num = Convert.ToUInt16(ch);//In .NET, chars are UTF-16
                //The basic characters have the same code points as ASCII, and the extended characters are bigger
                if ((num >= 32u) && (num <= 126u)) buffer.Append(ch);
            }
            tmpContents = buffer.ToString();
            */
            Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
            if (regex.IsMatch(tmpContents))
            {
                tmpContents = regex.Replace(tmpContents, String.Empty);
            }
            return tmpContents;
 
        }









Impacto para atualizar grandes valores ( Problema x Solução ) VARCHAR (MAX), NVARCHAR (MAX) e VARBINARY (MAX) que contêm valores como JSON ou XML, sem problemas de desempenho.



A ideia desse estudo é entender o impacto para atualizar grandes valores dados e para substituir os tipos de dados.

/*
Fonte de Estudo: mssqltips
*/


Estudos feitos na versão 2014 Microsoft Sql Server


Primeiramente vamos iniciar os estudos criando uma tabela na base de dados.
Como é um estudo de caso, podemos reparar no comando Drop table  com If Exists para apagar a tabela caso já exista (**interessante**)


DROP TABLE IF EXISTS largetableobject 

CREATE TABLE largetableobject 
             ( 
                          id   bigint IDENTITY , 
                          col1 varchar(max) 
             )

---------
Em seguida podemos fazer, uma inserção de uma grande quantidade de dados - que no exemplo é feito em segundos usando os comandos que exigem permissão de superior de execução na base de dados ( OPENROWSET (BULK )


INSERT INTO largetableobject 
            (col1) 
SELECT bulkcolumn 
FROM   OPENROWSET (BULK 'C:\temp\5722_citylots.json', single_clob) AS j

go 
SELECT Object_name(I.object_id), 
       I.NAME, 
       AU.total_pages, 
       AU.used_pages, 
       AU.data_pages, 
       P.rows, 
       AU.type_desc 
FROM   sys.allocation_units AS AU 
       INNER JOIN sys.partitions AS P 
               ON AU.container_id = P.partition_id 
       INNER JOIN sys.indexes AS I 
               ON I.index_id = P.index_id 
                  AND I.object_id = P.object_id 
WHERE  P.object_id = Object_id('LargeTableObject') 

go 



DBCC freeproccache 

DBCC dropcleanbuffers 

CHECKPOINT 

SET statistics io ON 

SELECT * 
FROM   Fn_dblog(NULL, NULL) 

go 

----------------teste até aqui e veja

UPDATE dbo.largetableobject 
SET    col1 = col1 + Replicate(' regular update ', 2 ) 
WHERE  id = 1 

go 

SELECT * 
FROM   Fn_dblog(NULL, NULL) 

go 

----------------teste até aqui e veja

DBCC freeproccache 

DBCC dropcleanbuffers 

CHECKPOINT 

SET statistics io ON 

SELECT * 
FROM   Fn_dblog(NULL, NULL) 

go 

----------------teste até aqui e veja

UPDATE dbo.largetableobject 
SET    col1.Write (Replicate(' write update ', 2), NULL, NULL) 
WHERE  id = 1 

go 

SELECT * 
FROM   Fn_dblog(NULL, NULL) 

go 


----------------teste até aqui e veja

Comparar planos de execução
Se olharmos para os planos de execução para as duas consultas, podemos ver que eles quase parecem iguais. Mas, como vimos, há muito menos atividade ao usar a cláusula WRITE.


/*
Conclusão do SITE (mssqltips)
Há uma grande diferença ao usar a cláusula WRITE e esse aprimoramento é um bom motivo para alterar a maneira como você atualiza tipos de dados de grande valor. Os planos de execução não mostrarão qual é a melhor escolha, portanto, você precisa usar o comando set statistics io para obter mais informações.
*/

ESTUDANDO PORTUGUÊS no DIA A DIA. Já ouviu falar em verbos bitransitivo e pronominal

ESTUDANDO PORTUGUÊS no DIA A DIA. Já ouviu falar em verbos bitransitivo e pronominal


Olá, tudo bem!

Aqui é o ANDERSON PETRY! 
ANDERSON PETRY


Hoje ao escrever um texto para uma demanda que estava atendendo observei a necessidade de saber se escrevi corretamente a palavra "RESSARCIR", e descobri muito mais...


Vamos compartilhar para o nosso crescimento pessoal e interpessoal.


Além da própria escrita, ouvi melhor a pronúncia e sua tradução.

Veja:
  1. transitivo direto e bitransitivo e pronominal
    fornecer compensação a (alguém ou si mesmo); indenizar(-se).
    "r. danos"
  2. 2.
    transitivo direto e bitransitivo
    guarnecer de (o que for necessário); abastecer, prover.
    "r. a cidade devastada pela seca"



Tradução: to reimburse  ou sinônimos -> repaycompensaterecoup


Outro momento de pesquisa me levou a ver esse site, que é bem desafiador - propondo para ouvir o conteúdo.




Também ao clicar no Google para ver MAIS (...) - nas opções ( LIVROS ) nos apresenta muitos resultados:



Os verbos transitivos diretos-indiretos são aqueles utilizados com dois objetos: um direto, outro indireto, concomitantemente. Exemplos: "No inverno, Dona Cléia dava roupa e comida aos pobres." objeto direto: roupa e comida objeto indireto: aos pobres "A empresa fornece comida aos trabalhadores da firma."


Fontes:
(Acessado em 09/07/2019)

(Acessado em 09/07/2019)