![]() |
Created by Thiago Russo
about 7 years ago
|
|
Question | Answer |
exemplo de estrutura de tabela e comando SQL para criação de tabela |
Image:
Create Table (image/png)
|
exemplo de como recurperar (select) dados |
Image:
Select (image/png)
|
como o SqlDataReader funciona? | A SqlDataReader é um stream de linhas que executa "somente pra frente". Vc ñ pode ir para trás, enquanto está lendo; só para a frente. Vc pode acessar as colunas de uma linha resultante tanto pelo índice e pelo nome. O SqlDataReader oferece vários métodos q podem mapear o valor de uma coluna para o tipo de CLR correspondente. Ex: vc pode chamar métodos como GetInt32 (int index), GetGuid (int index), GetString (int index), e assim por diante |
Ao executar uma consulta, vc tb pode executar em lote várias instruções SQL em conjunto. O SQL-DataReader retornado contém vários conjuntos de resultados. Vc pode avançar para a próxima definida chamando NextResult ou NextResultAsync no seu objeto SqlDataReader resultado Exemplo de como implementar... |
Image:
Multiple Select (image/png)
|
update rows |
Image:
Update Rows (image/png)
|
Usando parâmetros Problema de injeção de SQL | Como uma consulta SQL é nada + do que uma string simples, vc pode ser tentado a concatenar várias strings em conjunto para criar sua consulta. No entanto, fique ciente de que este é um enorme risco de segurança. Ex: digamos que vc tem um formulário no qual as pessoas podem preencher seus nomes que você vai inserir na tabela Pessoas. Sua consulta será parecido com este: INSERT INTO Pessoas VALUES ('John', 'Doe', null) Agora, vc pode ler os valores que um usuário entra e, em seguida, construir manualmente essa string. Mas o que aconteceria se um usuário digita o seguinte para um nome do meio? '); DELETE FROM Pessoas; -- Depois de executar essa consulta, todos os dados na sua tabela As pessoas seriam excluídos. Esta falha de segurança é conhecida como injeção de SQL. |
Como fazer para proteger sua consulta de injeção de SQL? | |
Usando transações O que são transações? | Quando se trabalha com um banco de dados, as coisas podem dar errado. Talvez você está executando várias consultas que devem ser agrupadas. Se a última falhar, os anteriores já são executadas, e de repente os seus dados pode estar corrompidos. Utilizar transações, resolve esse problema. |
ACID | Devido a isso, .NET ajuda vc com transações. Uma transação tem quatro propriedades fundamentais que são referidos como ACID: ■ Atomicity (Atomicidade): Todas as operações são agrupadas, como uma operação atômica. Se uma falhar, todas falham. ■ Consistency (Consistência): Transações sempre conduzem o BD para um estado válido. ■ Isolation (Isolamento): Transações pode operar de forma independente uma da outra. Várias transações concorrentes não irão influenciar o outra. Será como se fossem executadas em série. ■ Durability (Durabilidade) O resultado de uma transação confirmada é sempre armazenado permanentemente, mesmo se o banco de dados trava imediatamente a seguir. |
exemplo utilizando TransactScope | |
E se uma exception ocorrer dentro de uma TransactScope? E se nada der errado? | Se ocorrer uma exceção dentro do TransactionScope, toda a transação será revertida. Se nada der errado, você usa TransactionScope.Complete para completar a transação. É importante usar o TransactionScope dentro de uma instrução using para que ele seja automaticamente eliminados quando já não é necessário. |
Vc pode definir o comportamento do TransactionScope com TransactionScopeOption | Um TransactionScope tb pode ser construída com um enum TransactionScopeOption. Ao utilizar este enum, vc pode definir o comportamento do TransactionScope. Um TransactionScope pode ser construída com três opções: ■ Required: Junta a um ambiente de transação ou criar um novo se ele não existir. Se houver um ambiente de transação, essa transação controla qdo a transação for concluída. Esse é o escopo padrão. ■ RequiresNew: Inicia uma nova transação. ■ Suppress (Suprimir): Não participa de qualquer transação. |
Gerenciamento de transação utlizando TransactionScope e transações distribuídas | Ao usar TransactionScope, o .NET gerencia automaticamente a transação para vc. Se sua transação usa conexões aninhadas, vários BD, ou vários tipos de recursos, sua transação é promovida a uma transação distribuída. A promoção de uma transação distribuída pode ter um grande impacto no desempenho se não é necessário. Se possível, tente evitar transações distribuídas. Se vc precisar deles, .NET Framework irá gerenciá-las para vc. |
Usando um Object Relational Mapper (ORM) O que é incompatibilidade de impedância objeto-relacional ? | Um dos problemas com um banco de dados relacional é que é de natureza diferente da estrutura orientada a objeto que você deseja usar em suas aplicações. Você usa objetos que têm relação com outros objetos ou que herdam a partir deles. O banco de dados utiliza tabelas com colunas e chaves estrangeiras para outras tabelas. Isto é o que é chamado de incompatibilidade de impedância objeto-relacional (object-relacional impedance mismatch). |
Microsoft Entity Framework | Este é o lugar onde um softwade de Objeto Relational Mapping (ORM) entra em jogo. Um desses ORM é o open source da Microsoft Entity Framework, o que diminui o peso do trabalho tedioso de mapear seus objetos, a construção de queries, e manter o controle de todas as mudanças. O EF pode ser usado com algumas abordagens diferentes: ■ Database First: vc deseja mapear um BD existente para a sua estrutura de objeto. ■ Model First: vc quer projetar seu modelo de objeto com um designer gráfico e, em seguida, criar um BD que o suporta. ■ Code First: Você cria seu modelo de objeto no código e, em seguida, gerar um BD que pode armazenar seus dados. |
desempenho X velocidade de desenvolvimento | Usar um ORM é um compromisso entre desempenho e velocidade de desenvolvimento. Como o EF usa Reflection para mapear a partir dos resultados da consulta SQL para objetos, o que é sempre mais lento do que fazê-lo com a mão. No entanto, usando o Entity Framework irá aumentar a sua velocidade de desenvolvimento imensamente. Ele permite que você crie seu aplicativo rapidamente, priorizando as partes que precisam de um melhor desempenho. O Entity Framework é tipicamente bom o suficiente para a maioria das situações. Se não, você pode adicionar um procedimento armazenado (stored procedures) simples para as consultas que são problemáticas. *hoje, micro-orm é mais indicado do que sp |
ex de mapeamento da claase Person utilizando code first |
Image:
Codefirst (image/png)
|
ex simples persistindo e consultado dados com EF (De acordo com o mapeamento acima) |
Want to create your own Flashcards for free with GoConqr? Learn more.