sábado, 31 de julho de 2010

Mini-Curso C# - Parte #7 - ADO.NET

O que é ADO .NET

ADO .NET é a nova tecnologia para acesso a dados da plataforma .NET estando integrada ao .NET Framework e oferecendo diversas classes que permitem realizar praticamente todas as tarefas relacionadas com o acesso e
manutenção de dados.

ADO .NET oferece suporte a uma variedade de opções para desenvolvimento
de soluções com acesso a dados que permitem a comunicação com qualquer
fonte de dados, desde os já conhecidos gerenciadores de banco de dados relacionais (SGBD) como : SQL Server, MySQL, FireBird, Oracle, Sybase, Access, XML, arquivos textos, etc.

Os componentes considerados os pilares da ADO.NET são o DataSet e os provedores .NET que são um conjunto de componentes que incluem os objetos:

Connection - responsável por efetuar a conexão com o banco de dados  

Command - responsável por executar comandos contra o banco de dados

DataAdapter - é utilizado para preecher o objeto DataSet;

O ADO.NET pode acessar dados de várias maneiras: OLE DB , ORACLE, SQL, ODBC e driver de terceiros como os do FireBirb.

Cada objeto possui uma versão para cada uma das maneiras aqui mencionadas, assim temos os objetos:

OleDbConnection, OleDbCommand, OleDbDataReader, OleDataAdapter;

SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter;

OdbcConnection, OdbcCommand,etc.


Arquitetura ADO.NET


A diferença entre DataReader e DataSet

Quando falamos de desempenho, a utilização de um DataReader leva vantagem, pois obtém o acesso aos dados assim que o objecto fica disponível, ao contrário do DataSet, é necessário aguardar para que este fique preenchido, além disso o DataReader é do tipo ForwardOnly, ou seja, dados
que são unicamente de leitura e com o acesso desde o primeiro registro até ao último. Já com o DataSet pode-se “andar” para a frente ou para trás nos dados.

Afinal DataSet ou DataReader ?

Para decidir se você deve usar um DataSet ou um DataReader em sua aplicação de acesso a dados, você deve considerar o nível de funcionalidade que vai precisar usar na sua aplicação.

Você deve usar um DataSet em sua aplicação quando:
  • você precisar trabalhar com mais de uma tabela de dados simultaneamente.
  • Você precisar de navegação entre múltiplas tabelas de resultados.
  • você precisar manipular dados de múltiplas fontes: banco de dados , arquivos XML, arquivos textos, planilhas eletrônicas, etc...
  • você precisar trocar dados entre camadas ou usar um Web Service XML.
  • você precisar reutilizar o mesmo conjunto de linhas para alcançar desempenho através de cache de dados (via ordenação, busca ou filtro de dados)
  • você precisar efetuar uma grande quantidade de processamento por linha.
  • você precisar manipular dados usando operações XML como XLST ou consultas XPath.
Você deve usar um DataReader em sua aplicação quando:
  • Você precisar trabalhar somente com uma tabela de dados por vez
  • você não precisar usar cache de dados
  • você precisar somente exibir os dados de uma tabela
  • você precisar acessar de forma rápida e de uma vez os dados de uma forma somente-leitura e somente-para-frente
  • você precisar processar uma quantidade de dados muito grande para caber na memória
Nota: O DataAdapter usa o DataReader par preencher o DataSet. Desta forma , o desempenho ganho pela utilização do DataReader é que você salva na memória os dados que o DataSet irá consumir.

Em resumo: utilize um DataReader sempre que você puder, deixando a utilização de um DataSet para os casos realmente necessários.


Take care

sábado, 24 de julho de 2010

Ferramentas de Desenvolvimento

Salve, salve amigos,

Abaixo, os nomes e link das ferramentas para desenvolvimento. Faça o download, e bons estudos.


Delphi - RAD Studio 2010 - Desenvolvimento Win32

Delphi Prism for .NET e Mono

Visual Studio 2010 - .NET e Windows Forms

Banco de Dados SQL Server 2008 Express

Banco de Dados Firebird

Take care

Delphi Prism 2011 no Visual Studio 2010



Take care

sábado, 17 de julho de 2010

Mini-Curso C# - Parte #6

Salve, salve amigos.

Vamos continuar nosso mini-curso.
 
Laço do.. while

Vejamos, porque é que teríamos mais um loop do tipo 'while'? Se fossemos analisar
com cuidado veríamos que o loop 'while' dependendo do caso pode nunca ser
executado, ou seja, se a condição do loop 'while' retorna falsa de primeira ele nunca
vai ser executado. No exemplo acima se atribuíssemos o valor 10 a variável contador
em sua declaração o loop 'while' nunca começaria. Com o loop 'do.. while' o código
será executado ao menos uma vez porque nós fazemos a verificação da condição no
final da instrução, veja:

do
{
//instruções
}
while (expressão booleana)

Podemos traduzir 'do' para 'faça', ou seja, faça as instruções enquanto (while)
expressão seja verdadeira. Assim garantimos que ao menos uma vez nossas instruções
serão executadas. Exemplo:

int contador = 10;
do
{
MessageBox.Show (contador.ToString());
}
while(contador != 10);

Veja que mesmo contador sendo igual a 10 a instrução será executa ao menos uma vez
porque só depois que fazemos a verificação.
 
Laço foreach

Nós iremos aprender sobre arrays no próximo artigo, mas para mostrar o
funcionamento do loop 'foreach' tenho que usar um array, explicarei melhor no sobre
arrays no próximo artigo.

O loop 'foreach' é usado para interagir (percorrer) listas. Ele opera sobre Arrays ou
coleções veja sua syntax básica:

foreach ( in )
{
//instruções
}

Veja um exemplo pratico para facilitar o entendimento:

string[] nomes = {"Cleber", "Carol", "Denis", "Roberto"};
foreach (string pessoa in nomes)
{
MessageBox.Show ("{0} ", pessoa);
}

Criamos um array de string e colocamos alguns elementos dentro e no nosso loop
'foreach' será exibida todos os elementos dentro de nosso array. Veremos mais sobre
o 'foreach' no próximo artigo que trata de arrays.

Até a próxima.
 
Take care.

Mini-Curso C# - Parte #5


Salve, salve amigos.

Vamos continuar nosso mini-curso.

Estrutura de Repetição

As estruturas de repetição são usadas para controlar a execução de códigos
repetidamente até que uma condição seja verdadeira.
Veja os tipos de estrutura de repetição que vamos aprender neste artigo:
  •  Laço for
  •  Laço while
  •  Laço do.. while
  •  Laço foreach 
Uma estrutura de repetição é também conhecida como Loop/Laço. O primeiro tipo de
loop que vamos estudar é o 'for'. O loop 'for' trabalha checando uma condição para
executar um bloco de código até que essa condição seja verdadeira, no caso do loop
'for' temos que em sua syntax declarar sua inicialização, sua condição e seu
incremento, veja:

for (int i =0; i <= 10; i++)
{
//instruções
}

No código acima temos a syntax de um loop 'for' onde na primeira parte declaramos
uma variável do tipo inteiro (int) e a inicializamos com o valor 0 (zero), na segunda
parte temos a condição nesse caso verifica se a nossa variável recém criada é menor
ou igual a 10 e a terceira e ultima parte é o incremento desta variável, sendo essas três
partes separadas por ';' (ponto e virgula). O funcionamento é simples todo o código
dentro desse bloco do 'for' será executado dez vezes. Simples não? Mas você deve ter
algumas perguntas em mente como, por exemplo: porque a variável chama 'i'? o que é
incremento? Vamos as respostas!

Primeiro chama-se 'i' por um motivo simples: convenção. 'i' vem de índice e isso já se
tornou meio que um padrão, mas essa variável pode ter qualquer nome, por exemplo:
contador.
Segundo um incremento nada mais é do que adicionar 1 a uma variável, ou seja, se
uma variável vale 0 (zero) e passa por um incremento logo essa variável vale 1 e se
passa mais uma vez vale 2 e assim por diante. E o que acontece com o decremento é o
inverso, ou seja, se uma variável vale 2 e passar por um decremento agora passa a
valer 1 e assim por diante.
Respondidas as questões veja um exemplo pratico do loop 'for':

for (int i = 0; i < 20; i++)
{
int res = i * 2;
MessageBox.Show (res.ToString());
}

Veja que embora simples mostra bem o funcionamento do 'for', neste caso vai mostrar
na tela o valor de 'i' multiplicado por 2 enquanto 'i' for menor que 20.


Laço while

De modo diferente do loop 'for' (embora o objetivo seja o mesmo, ou seja, repetir a
execução de um código testando uma condição) o loop 'while' é mais simples de ser
entendido, pois sua syntax não requer que você coloque na mesma linha variável de
inicialização, condição e o seu incremento. No loop 'while' apenas colocamos a
condição que queremos testar, veja como fica a syntax:

while (expressão booleana)
{
//instruções
}

Veja como é simples o código. Expressão booleana é uma expressão que sempre
retorna falso ou verdadeiro e a instruções dentro do bloco de código do loop 'while' só
será executada enquanto essa expressão retornar verdadeiro. Veja um exemplo:

int contador = 2;
while (contador != 10)
{
MessageBox.Show (contador.ToString());
contador++;
}

Neste caso temos uma variável chamada contador e seu valor é 2, no nosso loop
'while' testamos se a variável contador é diferente de 10 caso verdadeiro mostramos
na tela o valor atual de contador e o incrementos em 1 e o loop 'while' continuará até
que essa condição se torne falsa.

Cuidado: não esqueça de incrementar ou se assegurar que sua condição pode ser falsa
em algum momento, pois caso contrario você entrará em um loop infinito, ou seja, a
condição nunca será falsa e o loop vai continuar até travar a máquina.

Até a próxima.
Take care.

domingo, 11 de julho de 2010

Mini-Curso C# - Parte #4

Salve, salve amigos.

switch... case

A instrução 'switch.. case' prove um caminho mais limpo para escrever múltiplas
instruções 'if..else', veja o exemplo:

switch(a)
{
case 1:
   MessageBox.Show ("a é igual a 1");
   break;

case 2:
   MessageBox.Show ("a é igual a 2")
   break;
default:
   MessageBox.Show ("a não é igual a 1 e nem igual a 2");
break;
}



Colocamos a variável 'a' dentro do 'switch' e dentro de nosso código vamos verificando
com o 'case' o valor de nossa variável. No nosso código temos duas possibilidades para
caso seja 1 e caso seja 2 e ainda temos a opção 'default' que é conhecida como 'case
else', ou seja, se nenhum 'case' for atendido ela será executada, lembrando que é
opcional colocar o 'default'.

Até a próxima.

Take care

Mini-Curso C# - Parte #3

Salve, salve amigos

Operadores Aritméticos
Em C# temos os seguintes operadores aritméticos:


Operadores de atribuição
Em C# temos os seguintes operadores de atribuição:


Operadores relacionais
Em C# temos os seguintes operadores relacionais:


Tipos de variáveis:
A seguinte tabela mostra os tipos do C# com sua referencia no Framework.
Os tipos da tabela abaixo são conhecidos como tipos internos ou Built-in.


Cada tipo no C# é um atalho para o tipo do Framework. Isso quer dizer que se
declararmos a variável desta forma:

string nome;
 

ou dessa forma
 

System.String nome;

teremos o mesmo resultado. O atalho serve apenas para facilitar na hora de
desenvolver a aplicação.
A seguinte tabela mostra os tipos de variáveis e os valores possíveis de se armazenar
em cada uma delas.



Estrutura de Decisão

Basicamente temos dois tipos básicos de instruções de decisão:
1. if... else;
2. switch.. case.

if... else
A instrução 'if...else' é usada para executar blocos de código condicionalmente
através de uma expressão Booleana ( verdadeiro ou falso ). A clausula 'else' é opcional
e seu conteúdo será executado somente se o resultado da expressão booleana for
false ( falso ). Veja o exemplo:

If ( a == 5 )
    MessageBox.Show("a é igual a 5");
else
    MessageBox.Show ("a é diferente de 5");


No código acima na instrução 'if' ( Se ) fazemos uma verificação muito simples, onde
testamos se 'a' é igual a '5' caso seja verdadeiro ( true ) o código logo abaixo é
executado, ou seja: 'System.Console.WriteLine('a é igual a 5');'. Caso o resultado dessa
expressão lógica seja falso, ou seja, 'a' não seja igual a '5' o código do bloco 'else' (se
não) será executado, nesse caso: "System.Console.WriteLine('a é diferente de 5');".

Para casos onde nosso código tem mais de uma linha ( o que é mais comum ) devemos
usar as chave '{' e '}' para delimitarmos os blocos if e/ou else, veja:

if ( a == 5 && b != 2 )
{
   MessageBox.Show ("a é igual a 5");
   MessageBox.Show ("b é diferente a 5");
}

Neste caso temos uma verificação composta, ou seja, verificamos duas condições se 'a'
é igual a '5' E(&&) se 'b' é diferente de '2' essa condição só resultará em verdadeiro
caso as duas condições sejam verdadeiras pois estamos usando o operador lógico '&&'.

else if
A instrução 'else if' é usada quando temos varias condições e pra cada condição temos
códigos diferentes, ou seja, fazemos coisas diferentes para cada caso veja o exemplo:

if ( a== 1)
{
// perceba que mesmo com uma linha só de código eu posso usar os delimitadores
   MessageBox.Show ("a é igual a 1");
}
   else if ( b ==2 )
{
   MessageBox.Show ("b é igual a 2");
}
   else if( c ==3 )
{
   MessageBox.Show ("c é igual a 3");
}
else
{
   MessageBox.Show ("Faz algo caso nenhuma condição seja atendida");
}


Podemos 'traduzir' o 'else if' para 'se caso'.
A instrução 'if' ainda pode ser emulada de forma mais simples através do operador '?'
(interrogação) veja:

int a = (expressãoBooleana) ? 1 : 0;
Nesse caso se a expressão Booleana seja verdadeira ( true ) a variável 'a' receberá o
valor '1' e caso seja falso ( false ) a variável recebe '0'. Veja um exemplo prático:

MessageBox.Show (a == 5 ? "Sim a é igual à 5" : "Não a é diferente de 5");
Se 'a' for igual a 5 o resultado será: "Sim a é igual à 5", caso 'a' não seja igual a '5' o
resultado será: "Não a é diferente de 5".


Até a próxima.

Take care