Arquiteto de Software, Desenvolvedor Full Stack e Instrutor
| wtecnologia@outlook.com.br
Especialista em linguagem de programação, banco de dados, consultor e apaixonado por tecnologia.
quinta-feira, 21 de outubro de 2021
EF Core: The name "SqlServerValueGenerationStrategy" does not exist in the current context
SqlServerValueGenerationStrategyé definido com Microsoft.EntityFrameworkCore.SqlServer.dll.
Neste caso certifique-se de instalar o seguinte pacote Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Se desejar você pode selecionar a versão do pacote no gerenciador de pacotes
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 5.0.11
Provedor de banco de dados Microsoft SQL Server para Entity Framework Core.
segunda-feira, 2 de agosto de 2021
Erro 0xc0202049: Tarefa de Fluxo de Dados 1: Falha ao inserir na coluna somente leitura
sábado, 17 de julho de 2021
Enviar mensagens no ZAP sem precisar adicionar aos contatos
quinta-feira, 15 de abril de 2021
WINDOWS FORM C# GRID ZEBRADA
Com o controle DataGridView, você pode especificar informações de estilo para alternar linhas. Isso permite usar as características de estilo como cor e fonte , além da cor da tela de fundo, para diferenciar as linhas alternadas.
Os estilos usando as propriedades RowsDefaultCellStyle e AlternatingRowsDefaultCellStyle substituem os estilos especificados nas propriedades do DataGridView,
dgvLog.AlternatingRowsDefaultCellStyle.BackColor = Color.LightYellow;
dgvLog.AlternatingRowsDefaultCellStyle.ForeColor = Color.Maroon;
domingo, 11 de abril de 2021
Comunicação Síncrona e Assíncrona
Comunicação síncrona refere-se ao contato imediato entre o emissor (quem envia a mensagem) e o receptor (quem recebe a mensagem), a comunicação assíncrona é atemporal.
Na comunicação assíncrona o emissor envia a mensagem, mas não necessariamente o receptor irá recebê-la imediatamente.
Imaginemos que um emissor está a enviar uma mensagem de texto através de um tubo e que a mensagem é enviada recorrendo a bolas, cada bola com uma letra. Quando as bolas chegam ao receptor, a mensagem tem que ser remontada, ou seja, têm que se colocar as bolas pela ordem correta, para se voltar a ter a mensagem.
- Em comunicação Assíncrona, cada bola tem um número de sequência, que permite que seja colocada na sua posição. Isto permite que as bolas sejam enviadas e recebidas por qualquer ordem, uma vez que esse número de sequência identifica a posição de cada bola (letra) na mensagem.
- Em comunicação síncrona, as bolas têm que ser enviadas e recebidas de forma sincronizada, mantendo uma ordem bem definida: a primeira bola (letra) a ser enviada, tem que ser a primeira a ser recebida e assim sucessivamente.
Comunicação Síncrona
Em uma comunicação síncrona o emissor e receptor são sincronizados pelo mesmo relógio, o receptor recebe de modo contínuo (mesmo quando nenhum bit é transmitido) os dados em compasso em que o emissor as remete.
Simples exemplo em Javascript:
function foo(){
console.log("foo");
}
function bar(){
console.log("bar");
}
function baz(){
console.log("baz");
}
foo();
bar();
baz();
Essas funções serão executadas em ordem, bar
não será executada até que foo
tenha terminado e baz
por sua vez só será executado após o término de bar
, havendo assim uma sincronia.
Comunicação Assíncrona
Em uma comunicação assíncrona a sincronização é diferente, o emissor envia o fluxo de dados e periodicamente insere um elemento de sinal, comumente chamado de flag, para que seja possível distinguir aonde começa (a informação de início da transmissão é o start-bit) e acaba (a informação de fim de transmissão é o stop-bit) o bloco de dados e qual a sua posição na sequência de dados transmitidos.
Exemplo:
function foo(){
console.log("Executando algo assíncrono aqui");
}
function bar(){
setTimeout(foo, 0);
console.log("Alguma coisa por aqui");
console.log("...");
}
bar();
Aqui não há a mesma sincronização que noutro exemplo, uma função não vai esperar pelo término da outra. Nesse exemplo usamos a função setTimeout
para enfileirar foo
que vai executar 0 ms após o loop de eventos, o loop de eventos ficará indisponível até completar sua atual pilha de execução - neste caso, o resto de bar
, que inclui as duas declarações console.log
. Após o término de bar
o loop de eventos fica livre, e assim foo
pode ser executada.
Saída:
Alguma coisa por aqui
...
Executando algo assíncrono aqui
Quando e para que devo usá-las? Grande parte do processo de tomada de decisão sobre isso envolve o senso comum, um conjunto de fatores, uma comunicação assíncrona pode ser usado quando a resposta não tenha que ser entregue urgentemente, esse tipo de comunicação é adequado para situações em que não seja necessário a entrega urgente dos dados, por outro lado, não seria apropriado usar esse tipo de comunicação se você precisa de interação imediata. Já a comunicação síncrona é ideal quando se precisa de espontaneidade, como em uma conversa em tempo real entre duas ou mais pessoas.
Tanto a comunicação síncrona, quanto a assíncrona, têm suas vantagens e desvantagens, utilizar uma ou outra vai depender da necessidade da sua aplicação.
segunda-feira, 29 de março de 2021
WINDOWS FORMS - DATAGRIDVIEW, OBTER O ÍNDICE DA GRID
int indice = dgvTabelaParticulaAdicionar.CurrentCell.RowIndex;
Data Grid View Cell. Row Index
Obtém o índice da linha pai da célula.
WINDOWS FORMS C# - ALINHAR À DIREITA UMA COLUNA DO DATAGRIDVIEW
É bem simples. Basta definir a constantes que indicam o alinhamento de conteúdo dentro de uma célula DataGridView
dgvTabelaParticulaAdicionar.Columns[6].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.TopRight;
Campos
BottomCenter | 512 | O conteúdo é alinhado verticalmente na parte inferior e horizontalmente no centro de uma célula. |
BottomLeft | 256 | O conteúdo é alinhado verticalmente na parte inferior e horizontalmente à esquerda de uma célula. |
BottomRight | 1024 | O conteúdo é alinhado verticalmente na parte inferior e horizontalmente à direita de uma célula. |
MiddleCenter | 32 | O conteúdo é alinhado no centro vertical e horizontal de uma célula. |
MiddleLeft | 16 | O conteúdo é alinhado verticalmente no meio e horizontalmente à esquerda de uma célula. |
MiddleRight | 64 | O conteúdo é alinhado verticalmente no meio e horizontalmente à direita de uma célula. |
NotSet | 0 | O alinhamento não está definido. |
TopCenter | 2 | O conteúdo é alinhado verticalmente na parte superior e horizontalmente no centro de uma célula. |
TopLeft | 1 | O conteúdo é alinhado verticalmente na parte superior e horizontalmente à esquerda de uma célula. |
TopRight | 4 | O conteúdo é alinhado verticalmente na parte superior e horizontalmente à direita de uma célula. |
Formatar TextBox Valores Decimais
Adicione um TextBox ao seu projeto e faça as seguintes alterações:
string valor; private void txt_valor_KeyPress(object sender, KeyPressEventArgs e) { if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(Keys.Back)) { if (e.KeyChar == ',') { e.Handled = (txt_valor.Text.Contains(",")); } else e.Handled = true; } } private void txt_valor_Leave(object sender, EventArgs e) { valor = txt_valor.Text.Replace("R$", ""); txt_valor.Text = string.Format("{0:C}", Convert.ToDouble(valor)); } private void txt_valor_KeyUp(object sender, KeyEventArgs e) { valor = txt_valor.Text.Replace("R$","").Replace(",","").Replace(" ","").Replace("00,",""); if(valor.Length == 0) { txt_valor.Text = "0,00"+valor; } if(valor.Length == 1) { txt_valor.Text = "0,0"+valor; } if(valor.Length == 2) { txt_valor.Text = "0,"+valor; } else if(valor.Length >= 3) { if(txt_valor.Text.StartsWith("0,")) { txt_valor.Text = valor.Insert(valor.Length - 2,",").Replace("0,",""); } else if(txt_valor.Text.Contains("00,")) { txt_valor.Text = valor.Insert(valor.Length - 2,",").Replace("00,",""); } else { txt_valor.Text = valor.Insert(valor.Length - 2,","); } } valor = txt_valor.Text; txt_valor.Text = string.Format("{0:C}", Convert.ToDouble(valor)); txt_valor.Select(txt_valor.Text.Length,0); }
quarta-feira, 17 de março de 2021
DATAGRIDVIEW - AJUSTAR AS COLUNAS DE FORMA AUTOMÁTICA
Propriedade: Data Grid View. Auto Size Columns Mode
dataGridView_ExamePacienteDupicados.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
segunda-feira, 8 de março de 2021
TRUNCATE TABLE (Transact-SQL)
Remove todas as linhas de uma tabela ou partições especificadas de uma tabela sem registrar as exclusões de linha individual. TRUNCATE TABLE é semelhante à instrução DELETE sem nenhuma cláusula WHERE; entretanto, TRUNCATE TABLE é mais rápida e utiliza menos recursos de sistema e log de transações.
-- Syntax for SQL Server and Azure SQL Database
TRUNCATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name } [ WITH ( PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) ) ] [ ; ]
Argumentos
database_name
É o nome do banco de dados.
schema_name
É o nome do esquema ao qual a tabela pertence.
table_name
É o nome da tabela a ser truncada ou da qual todas as linhas são removidas. table_name deve ser um literal. table_name não pode ser a função OBJECT_ID() nem uma variável.
WITH ( PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) )
Aplica-se a: SQL Server (SQL Server 2016 (13.x) até a versão atual)
Especifica as partições para truncar ou das quais todas as linhas são removidas. Se a tabela não for particionada, o argumento WITH PARTITIONS
ON PARTITIONS gerará um erro. Se a cláusula WITH PARTITIONS
não for fornecida, a tabela inteira será truncada.
<partition_number_expression> pode ser especificado das seguintes maneiras:
Forneça o número de uma partição, por exemplo:
WITH (PARTITIONS (2))
Forneça os números de várias partições individuais separados por vírgulas, por exemplo:
WITH (PARTITIONS (1, 5))
Forneça os intervalos e as partições individuais, por exemplo:
WITH (PARTITIONS (2, 4, 6 TO 8))
<range> pode ser especificado como números de partições separados pela palavra TO, por exemplo:
WITH (PARTITIONS (6 TO 8))
Para truncar uma tabela particionada, a tabela e os índices deverão estar alinhados (particionados na mesma função de partição).
Restrições
Você não pode usar TRUNCATE TABLE
em tabelas que:
São referenciadas por uma restrição FOREIGN KEY. É possível truncar uma tabela que tenha uma chave estrangeira que referencie a ela mesma.
Participam de uma exibição indexada.
São publicadas com replicação transacional ou replicação de mesclagem.
São temporais com controle de versão do sistema.
São referenciadas por uma restrição EDGE.
Permissões
A permissão mínima necessária é ALTER
em table_name. As permissões TRUNCATE TABLE
são padronizadas para o proprietário da tabela, os membros da função de servidor fixa sysadmin
e as funções de banco de dados fixas db_owner
e db_ddladmin
, e não podem ser transferidas. Entretanto, você pode incorporar a instrução TRUNCATE TABLE
dentro de um módulo, como um procedimento armazenado, e conceder permissões adequadas ao módulo por meio da cláusula EXECUTE AS
.