Ciclo Básico Concluído

Olá galera,

Ontem tivemos nossa última aula do Ciclo Básico que foi prosposto. Quem teve a oportunidade de acompanhar até o fim deve ter tido uma noção básica com o que iremos trabalhar daqui pra frente. Quem não assistiu todas, ainda poderá continuar a aprender junto com os outros nas demais aulas.

Vamos a partir de agora definir temas específicos para nos apronfundar, mas antes, gostaria de marcar uma aula de revisão geral para fazermos um “mini-projeto” englobando tudo que vimos até agora, só a nível de revisão mesmo. Estou preparando esta aula e marco a data o quanto antes.

Por enquanto, já dando inicio aos nosso aprofundamentos, segue o link para quem quiser baixar o livro da certificação ( 70-528 ) Web-Based Client Development.

Abraços!

Anúncios

Acessando dados com .NET

Primeiramente, gostaria de parabenizar todas as equipes pernambucanas que marcarão presença na final brasileira da Imagine Cup 2008, enfatizando o time Try IT no qual Daniel (líder da CIN.NET) faz parte!

Pois bem, meu principal objetivo nesse post é esclarecer como se faz acesso a dados com a plataforma .NET. E, para tal assunto, nada mais que conviniente tratar das tecnologias ADO.NET e LINQ.

O ADO.NET é um conjunto de classes que reúnem serviços de acesso a dados para a plataforma .NET. Ele é uma evolução do ADO(ActiveX Data Object). Sua integração com o Microsoft Visual Studio é total e também é acessível de qualquer linguagem da plataforma .NET.

Sua arquitetura é baseda na figura abaixo, na qual explicarei cada camada :

  • Providers do ADO.NET

Os provedores do ADO.NET são todos aqueles que estão no retângulo esquerdo da figura acima(.NET Framework Data Providers). Essa camada possui provedores especializados para acessar banco de dados de diferentes fornecedores, isso para garantir o melhor proveito da base em que se está trabalhando. Alguns dos providers que estão disponíveis são:

  • Provedor do SQL Server (System.Data.SqlClient)
  • Provedor do Oracle (System.Data.OracleCliente)
  • Provedor do OLEDB (System.Data.OleDb)
  • Connection

Essa é a camada que garante a conexão com o banco de dados. Sua principal propriedade é a string de conexão, que especifica a localização da fonte de dados; e seus principais métodos são Open e Close, usandos para abrir e fechar conexões, respectivamente. É nessa camanda que também ocorre todo o controle de transação. Alguns dos objetos de conexão são:

  • SQLConnection – Do provedor para o SQL Server
  • OracleConnection – Do provedor para o Oracle
  • OleDbConnection – Do provedor para o OleDb
  • Command

Essa camada é a responsável por receber instruções SQL e/ou Store Procedures. Assim como na camada connection, há um objeto command para cada provedor(SQLCommand, OracleCommand,etc) nessa camada. Seus principais métodos são:

  • ExecuteReader: retorna um DataReader, objeto usado para leitura de uma consulta feita na fonte de dados.
  • ExecuteScalar: usado quando o comando SQL retorna um único valor (Ex.: Quantidade de alunos de uma instituição)
  • ExecuteNonQuery: usado quando o comando SQL não retorna nenhum tipo de dado (Ex.: Atualizar os dados do aluno que possui número de cpf igual a 123456789-0). Além de aparentemente não retornar nada, esse método retorna a quantidade de linhas afetadas.
  • DataReader

É a camada usada para representar um conjunto de resultados SQL. Sua vantagem é a extrema rapidez de leitura de dados, porém não podemos modificar os resultados de uma consulta. E, como é uma camada pertencente aos providers, existe um objeto diferente para cada fonte de dados(SQLDataReader, OracleDataReader,etc). Seu principal método é o Read, usado para navegar no resultado da consuta.

Lembrando que até agora estamos trabalhando de forma conectada com o banco de dados. Para não ficar só na teoria, vai um exemplo de código:

  • DataAdapter

É a camada especializada em intermediar as requisições de acesso a dados da aplicação e o banco de dados. Ele encapsula comandos SQL e/ou Store Procedures para tal. Seus principais métodos são Fill e Update, responsáveis por preencher o DataSet(veremos no próximo tópico) e atualizar o banco de dados a partir de um DataSet, respectivamente.

  • DataSet

É a camada responsável por gerenciar dados previamente adquiridos por acesso a bancos de dados e/ou arquivos XML. Nessa camada há disposição de objetos que trabalham de forma desconectada ao banco. O resultado de um DataSet fica guardado na memória principal do sistema. A partir daí, podemos navegar, atualizar dados de uma consulta(ainda na mémoria) e, posteriormente, atualizar os dados no banco de dados. Um grande avanço nessa camada é a existência do DataSet Tipado. Através dele podemos detectar erros de nome em tempo de compilação. Segue dois exemplo de cógigo:

Usando DataSet Não Tipado:

SqlConnection conexao = new SqlConnection(“Data Source=MACEIO\\SQLEXPRESS”);
SqlCommand comando = new SqlCommand(“SELECT * FROM Cliente WHERE nome LIKE ‘l%'”,conexao);
conexao.Open();
SqlDataAdapter adaptador = new SqlDataAdapter(comando);
DataSet bancoDataSet = new DataSet(“Banco DataSet”);
adaptador.Fill(bancoDataSet,”Banco DataSet”);
foreach(DataRow row in bancoDataSet.Tables[“Cliente”].Rows)
{
int id = Convert.ToInt32(row[“id”]);
string nome = Convert.ToString(row[“nome”]);
Console.WriteLine(“Cliente com id {0} e nome {1}”,id,nome);
}

Usando DataSet Tipado:


SqlConnection conexao = new SqlConnection(“Data Source=MACEIO\\SQLEXPRESS”);
SqlCommand comando = new SqlCommand(“SELECT * FROM Cliente”,conexao);
conexao.Open();
BancoDataSet bancoDados = new BancoDataSet();
int idCliente = bancoDados.Cliente.idColumn;
string nomeCliente = bancoDados.Cliente.nomeColumn;
Console.WriteLine(“Cliente com id {0} e nome {1}”, idCliente, nomeCliente);

Notem que o objeto BancoDataSet é um DataSet Tipado que representa meu banco de dados, por isso através dele podemos extrair sua tabela Cliente (bancoDados.Cliente). E quando estamos na tabela Cliente podemos extrair suas colunas(id e nome). Observem que essas extrações são feitas usando propriedades, podendo assim que erros de nome sejam detectados em tempo de compilação.

Bem, foram descritos os principais componentes na tecnologia ADO.NET.

Além do ADO.NET, existe outra nova tecnologia para acesso a dados, falo do LINQ (Language Integrated Query). Ele permite que os desenvolvedores enderecem consultas[à fonte de dados] usando a sintaxe de uma linguagem de programação gerenciada, como C# ou VB.NET, ao invés das declarações SQL. O LINQ trabalha de forma similar ao Hibernate, fazendo um mapeamento objeto-relacional. Segue um exemplo que usa tal tecnologia:

BancoLINQDataContext banco = new BancoLINQDataContext();

Table<Cliente> clientes = banco.Clientes;

var consulta = from cliente in clientes
where cliente.nome == “Lucas”
select cliente;

Antes de chegar nesse código ocorreram os seguintes passos:

1) Tinhamos uma tabela Cliente na base de dados
2) O LINQ criou um objeto na minha aplicação que representa a base de dados (BancoLINQDataContext )
3) O LINQ automaticamente criou a classe básica Cliente em minha aplicação C#
4) O LINQ automaticamente fez o mapeamento objeto-relacional (meu objeto Cliente à tabela Cliente)

Depois se fez um código que retorna todos os clientes com o nome “Lucas”. Percebe-se o uso da sintaxe do C# para tal, ao invés do comum SQL. Se bem que essa sintaxe se transformará em SQL depois! Notem também que fazemos consultas em nossos objetos, abstraindo, assim, o banco de dados.

Vale ressaltar que se fez uso na sintaxe do C# 3.0.

O objetivo desse artigo não é detalhar o LINQ, em próximas aulas/posts detalharei um pouco mais dessa nova tecnologia. Então fico por aqui e até a próxima aula!

Introdução ao ASP.NET

O que é?

ASP.NET é uma tecnologia da Microsoft para a criação de aplicações dinâmicas para a Web. Com ele pode ser feito desde websites dinâmicos até aplicações complexas; além Web Services.

ASP.NET não é uma linguagem de programação, como o ASP, e sim uma plataforma de desenvolvimento. Nele pode-se utilizar linguagens como C#, VB.NET, J# e Python para a construção das aplicações. Isso devido a ele utilizar o Common Language Runtime (CLR) da plataforma .NET da Microsoft. Com o CLR o desenvolvedor terá, além da possibilidade de ter várias linguagens a sua disposição, recursos como garbage collection e o debugger funcionando com qualquer uma dessas linguagens.

Controles

Um dos recursos do ASP.NET são os controles. Com eles o programador consegue ter acesso aos elementos HTML diretamente na linguagem de programação. Podendo acessar, por exemplo, um TextBox de um formulário e alterar suas propriedades. Uma vantagem evidente nesse recurso é facilidade de criar uma aplicação web, pois o desenvolvedor precisa apenas ter uma boa familiaridade com uma linguagem de programação, como o C#, para poder fazer aplicações ricas e interessantes.

Alguns tipos de controle

Nos guiando pelos exemplos que foram dados em aula da célula CIN.NET, onde falamos um pouco sobre controles que são freqüentemente usados, vejamos um exemplo de uso:
Um dos mais simples é o button:

Localização do Button no VS
Fica do lado esquerdo do visual web developer, na caixa Toolbox. Para utiliza-lo basta clicar nele e arrastar. Pronto. já está disponível para uso. E para ter acesso a ele basta especificar um ID na caixa de propriedades. Com esse ID você já poderá acessa-lo na linguagem de programação, como no exemplo abaixo:
(eu coloquei o ID do Button como sendo testeButton)

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
/**
* sempre que essa página for carregada no navegador do usuário
* esse evento será chamado.
*/
protected void Page_Load(object sender, EventArgs e)
{
//O texto que aparecerá no Button ao inciar a página
testeButton.Text = “Testando os elementos html do ASP.NET”;
}
/**
* Quando o testeButton for clicado, esse evento será chamado
*/
protected void testeButton_Click(object sender, EventArgs e)
{
// muda o texto do botão para “Teste feito, funciona?”
testeButton.Text = “Teste feito, funciona?”;
}
}

o resultado desse pequeno teste deve ser esse:
Exemplo com o button

Abaixo está uma tabela com alguns controles:

Função Nome
Mostrar texto Label
Edição de texto TextBox
Selecionar de uma lista DropDownList
ListBox
Exibir elemento gráfico Image
AdRotator
Seleção de valores em um formulário CheckBox
RadioButton
Seleção de data Calendar
Botões Button
LinkButton
ImageButton
Controle de navegação HyperLink
Controles para tabelas Table
TableCell
TableRow
Controles para fazer o agrupamento de outros controles CheckBoxList
Panel
RadioButtonList
Controles para fazer listagens Repeater
DataList
DataGrid

Além desses controles que servem HTML, há outros controles como os de validação de formulário; que são utilizados para informar ao usuário quando um elemento do formulário é de preenchimento obrigatório. Para informações mais elaboradas como um email, pode-se usar expressões regulares para definir como é o formato da informação que será válida.

Master Pages

Controles são muito interessantes, mas além desse tipo de recurso, o ASP.NET provê também ferramentas para o aumento da produtividade e reuso de código; Como as master pages, utilizadas quando tem-se uma parte do site que é repetida em várias vezes, como um menu estático ou um cabeçalho ou rodapé.
Para criar uma master page cliqua-se em “File >> New File >> Master Page”.
Ela vem, basicamente, em branco e com um campo chamado ContentPlaceHolder. Esse campo será onde o conteúdo que muda em cada página vai ficar. Todo o resto da página vai ser mantido para todas as páginas que utilizam essa master page. Então, para criar um cabeçalho, por exemplo, basta cria-lo em cima do ContentPlaceHolder, como abaixo

Exemplo com master page

Web.Config

O web.config é um arquivo XML usado para definir preferências e configurações de cada aplicação ASP.NET. Há uma interface gráfica para manipular esse arquivo e ele é acessível também para ser alterado em qualquer editor de texto. configurações de autenticação, acesso, compilação, erros, conexão, email… E é estruturado de forma hierárquica, possibilitando ao desenvolvedor aplicar também configurações a um subdiretório específico.

Para acessar a interface gráfica para essas configurações clique em “Website >> ASP.NET Configuration”, e abrirá uma página que nela você pode navegar e editar suas preferências.

Introdução ao SQL Server 2005

Olá pessoal!

Primeiramente, parabéns Bel [Lucas] por mais essa conquista, você merece… Sucesso! 

Agora, voltando ao assunto… Este artigo abordará alguns dos principais conceitos do SQL Server 2005 e apresentará ao usuário iniciante os ambientes de Banco de Dados (BD), Sistema de Gerenciamento de Banco de Dados (SGBD) e linguagem de definição/manipulação/consulta a dados (SQL).

Para baixar a apresentação em PowerPoint 2007 da última reunião da Célula CIN.NET (29/04) sobre o tema deste artigo clique aqui!

O que é persistência de dados? E, por que queremos persistir?
Quando o domínio é a computação, persistência de dados refere-se ao armazenamento destes em algum meio físico visando a sua disponibilização para acesso futuro. Por exemplo, quando inicializamos um array de inteiros com uma sequência de números, “alguém” [compilador + sistema operacional] se encarrega de armazenar estes dados numa partição da memória RAM. Esta é considerada um meio físico rápido, caro e volátil (quando o programa for encerrado os dados serão perdidos). Ou seja, memória RAM não resolve nosso problema [de persistência], quando pensamos em dados que precisem estar disponíveis mesmo após o reinício das aplicações. Uma alternativa seria o uso de arquivos, no entanto esta solução é um pouco tediosa, uma vez que manipular arquivos pode requerer muito esforço de programação. Para aplicações que utilizam grande quantidade de dados o uso de arquivos torna-se inviável por uma série de motivos: replicação, isolamento e falta de estruturação de dados, dificuldade em controlar acesso concorrente, uso de algoritmos complexos para se conseguir bom desempenho, etc.

Então o que precisamos é de um Banco de Dados!
Banco de dados
Figura 1 Banco de Dados!

Um banco de dados é uma coleção de dados inter-relacionados, estruturados, confiáveis, coerentes e compartilhados por diversos usuários. Vamos entender cada um dos conceitos empregados: inter-relacionados, porque não é útil se ter ilha de dados, é o conjunto de vários dados correlacionados que, quando manipulados, traduzem informação relevante; dados estruturados indicam que o mecanismo de acesso as dados é bem definido e o resultado obtido a partir de uma consulta possui uma estrutura previsível; é fundamental que os dados armazenados permaneçam coerentes e confiáveis enquanto durar a persistência, ou seja, os dados inseridos estarão disponíveis e não serão alterados, desde que explicitamente solicitado pelo usuário; além disso, outra grande característica dos bancos de dados é o compartilhamento de informações que ocorre, muitas vezes, entre pessoas que estão a milhares de quilômetros de distância, e ainda, acessando simultaneamente.

Para prover estes e outros serviços aos bancos de dados foram desenvolvidos poderosos Sistemas de Gerenciamento de Banco de Dados (SGBD’s). São softwares que se utilizam de complexos algoritmos para garantir máxima eficiência nos processos de armazenagem, recuperação e garantia da qualidade das operações sobre os dados. Os principais objetivos dos SGBD’s são eliminar ou reduzir:
• Redundância e inconsistência de dados;
• Dificuldade no acesso aos dados;
• Isolamento dos dados;
• Anomalias de acesso concorrente;
• Problemas de segurança;
• O entrelaçamento entre dados e a aplicação.

Vale mencionar alguns modelos de SGBD’s desenvolvidos e aprimorados ao longo dos [o leitor pode encontrar mais detalhes nas referências]: hierárquico, em rede, relacional, orientado a objetos, etc. Em geral, um SGBD possui 4 linguagens, que acabam por se “fundirem” numa só:
Data Definition Language (DDL), Data Manipulation Language (DML), Query Language (QL) e uma Linguagem de 4ª geração, que é a linguagem nativa ao SGBD. Alguns dos SGBD’s mais conhecidos: Microsoft SQL Server, Oracle, IBM DB2, MySQL e PostgreSQL.

É impossível num artigo introdutório no assunto de banco de dados não se falar na linguagem SQL, contudo não vou escrever muitas linhas sobre tal tópico, devido ao abundante material disponível na Web a esse respeito, além do artigo do meu amigo Lucas introduzindo a linguagem SQL.

A linguagem SQL (Structured Query Language) foi desenvolvida para o propósito do modelo relacional que trata a disposição lógica dos dados como tabelas. A SQL define métodos de definição e manipulação dos dados, além de mecanismos para administração de bancos de dados. Sua primeira versão foi desenvolvida na IBM na década de 70 e chamava-se SEQUEL, nos anos seguintes passou a se chamar SQL por questões legais. Foi padronizada pelas instituições ANSI e ISO como padrão oficial de linguagem em ambiente relacional. Alguns dos principais comandos da SQL são: Create, Drop, Alter, Select, Insert, Delete e Update.

Para maiores informações sobre banco de dados, SGBD’s e SQL, visite:
• Site da disciplina GDI: http://www.cin.ufpe.br/~if685/  
• Site oficial da linguagem SQL: http://www.sql.org/  
• Portal Macoratti: http://www.macoratti.net/indsql.htm
• Linguagem SQL: http://pt.wikipedia.org/wiki/Sql  
• Noções da linguagem SQL para consultas: http://www.linhadecodigo.com.br/Artigo.aspx?id=165  
• Principais comandos SQL: http://www.sqlmagazine.com.br/Artigos/sqlserver/02_Comandos_SQL.asp 

O SQL Server 2005
O Microsoft SQL Server é uma família de produtos que atende aos requisitos de armazenamento de dados dos ambientes OLTP (Online Transaction Processing) e OLAP (Online Analytical Processing), é um sistema de gerenciamento de bancos de dados relacional (RDBMS – Relational Database Management System). O SQL Server possui flexibilidade para suportar às várias necessidades de dados das aplicações e com níveis de banco de dados de tamanhos variando entre megabytes e terabytes, além de disponibilizar versões tanto para servidores móveis como de grande porte, trabalhando em conjunto com os serviços de Windows Clustering.

O Microsoft SQL Server 2005 redefine completamente a plataforma de bancos de dados SQL Server fornecendo a melhor tecnologia adequada ao porte da organização, seja ela pequena, média ou grande. Ele é o sucessor do SQL Server 2000, sua linguagem nativa é Transact-SQL, inclui suporte nativo para gerenciamento de dados XML, suporta acesso a databases através de web services por requisições SOAP, além da integração com o. NET Framework. 

Componentes do SQL Server 2005

Figura 2 Principais componentes do SQL Server 2005

Vejamos a seguir alguns dos novos recursos e estrutura do conjunto de serviços existentes no SQL Server 2005. Para ter acesso à lista completa de serviços, visite: http://www.microsoft.com/brasil/servidores/sql/prodinfo/top30features.mspx  

• Relacional Database – Inclui os componentes: o banco de dados básico e a pesquisa de texto integral. O banco de dados básico, e o Database Engine, são considerados o coração do SQL Server. A pesquisa de texto integral permite consultas em linguagem simples de dados armazenados em tabelas do SQL Server.

• Replication Services – A replicação aumenta a disponibilidade de dados distribuindo dados entre múltiplos bancos de dados, o que permite um aumento de carga de trabalho de leitura entre os servidores de banco de dados designados.

• Notification Services – Inclui um mecanismo de notificação e componentes de cliente para gerar e enviar mensagens sincronizadas e personalizadas para usuários quando um evento desencadeante ocorre. As notificações podem ser enviadas para dispositivos sem fio, como telefones celulares e PDAs, contas do Windows Messenger e contas de correio eletrônico.

• Integration Services – Fornece uma solução para transformação e integração de dados corporativos a fim de extrair e transformar dados de múltipas origens de dados e movê-los para uma ou mais fontes de destino. Isso permite mesclar dados de origens de dados heterogêneas, carregas dados em data warehouse e data marts etc.

• Analysis Services – Oferece o Online Analytical Processing (OLAP) e a funcionalidade de exploração de dados para aplicações de inteligência de negócio (Business Intelligence + Data Mining ). O Analysis Services permite que sua organização agregue dados das múltiplas origens de dados, como bancos de dados relacionais, e trabalhe com esses dados em uma ampla variedade de maneiras.

• Reporting Services – Inclui o Report Manager e o Report Server a fim de fornecer plataforma baseada em servidor completo para criar, gerenciar e distribuir relatórios. O Report Server é construído com base na tecnologia padrão do IIS e do .Net Framework, permitindo combinar os benefícios do SQL Server e do IIS para hospedar e processar relatórios.

• Espelhamento de Bases de Dados – Aumentar a disponibilidade de seus sistemas SQL Server configurando o failover automático para um servidor standby.

• Restauração Online – Apenas os dados sendo restaurados estarão indisponíveis, o resto da base de dados permanecerá online e disponível.

• Novo SQL Server Management Studio – Novo conjunto de ferramentas de gerenciamento.

• Hospedagem do .NET Framework – Criar objetos do banco de dados usando linguagens familiares como o Microsoft Visual C# .NET e Microsoft Visual Basic .NET.

• Tecnologias XML – O SQL Server 2005 suporta nativamente o armazenamento e a consulta de documentos XML.

• Web Services – Criar Web Services na camada de banco de dados, tornando o SQL Server um “escutador” HTTP e fornecendo um novo tipo de aceso a dados via Web Services.

• Service Broker – Fornece sistemas confiáveis de enfileiramento de tarefas e troca de mensagens como parte básica do banco de dados. As filas podem ser utilizadas para empilhar tarefas, como consultas e outras solicitações e processar conforme os recursos permitem. O sistema de troca de mensagens permite que aplicações de bancos de dados realizem comunicação entre si.

• Data Mining – Quatro novos algoritmos de data mining foram introduzidos, assim como ferramentas melhoradas e assistentes que facilitarão a mineração de dados para empresas de qualquer porte.

• Integração com o Microsoft Office System – Os relatórios que são fornecidos pelo Report Server do Reporting Services pode ser executado no contexto do Microsoft SharePoint Portal Server e aplicações Microsoft Office System como o Microsoft Word e Microsoft Excel.

Edições do SQL Server 2005
As edições do SQL Server 2005, são: Express, Workgroup, Standard e Enterprise, Compact Edition, Developer Edition e Evaluation Edition. As duas últimas têm o mesmo conjunto de recursos que a Enterprise Edition a única diferença entre elas está nas políticas de licenciamento.

É possível obter o SQL Server 2005 Express gratuitamente, em:
http://www.microsoft.com/downloads/details.aspx?FamilyID=220549b5-0b07-4448-8848-dcc397514b41&displaylang=en

Para ter acesso ao detalhamento comparativo entre as edições do SQL Server 2005, visite: http://www.microsoft.com/brasil/servidores/sql/prodinfo/features/compare-features.mspx

Manipulando o SQL Server no VS 2008 – Vamos praticar?!
Aqui segue um roteiro para manipulação do SQL Server no Visual Studio 2008, não estou entrando em detalhes de como fazer o quê, vimos isso durante a aula, mas no caso de possíveis dúvidas pode entrar em contato!

O objetivo é criar tabelas, consultas, stored procedures e relacionamento entre tabelas, apenas usando a interface do Visual Studio 2008 (também vale para o Visual Studio 2005).

• Abrir o Visual Studio 2008;
• Localizar o ‘Server Explorer’;
• Adicionar uma nova conexão;
• Criar as tabelas abaixo:

Tabelas Exemplo

• Exemplo de Stored Procedure***:

CREATE PROCEDURE ClientesDaAgencia
@codAgencia int

AS
Select Cliente.pk_cpf_cliente, Cliente.fk_codigo_agencia, Cliente.fk_numero_conta, Cliente.nome_cliente
From Agencia, Cliente, Conta
Where Agencia.pk_codigo_agencia = @codAgencia 
    and Cliente.fk_codigo_agencia = Agencia.pk_codigo_agencia
    and Cliente.fk_numero_conta = Conta.pk_numero_conta

*** Esta SP seleciona todos os clientes de uma determinada agência, exibindo o cpf, a agência, a conta e o nome do cliente.

E, agora, é só “brincar” com essas coisinhas e numa próxima reunião entrarmos em mais detalhes sobre algum dos assuntos abordados como a linguagem T-SQL, por exemplo!

É isso, obrigado!!!

Para maiores informações sobre SQL Server 2005, visite:
• Site Oficial do SQL Server (em português): http://www.microsoft.com/brasil/servidores/sql/default.mspx  
• SQL Server no MSDN: http://www.microsoft.com/brasil/msdn/sql/default.mspx  
• SQL Server no TechNet: http://www.microsoft.com/brasil/technet/prodtechnol/sql/default.mspx
• Criando objetos SQL com .NET (CLR – Managed Code): http://www.linhadecodigo.com.br/Artigo.aspx?id=594
• Portal Macoratti: http://www.macoratti.net/indsql.htm

Publicado em Aulas. Tags: . Leave a Comment »

Introdução à linguagem SQL

Pois bem, como em futuras aulas iremos explorar assuntos relativos ao SQL Server, venho através deste post escrever um pouco sobre a linguagem SQL (Structured Query Language), que é uma base para o conhecimento e trabalho com qualquer Sistema de Gerenciamento de Banco de Dados(SGBD). Mas, primeiramente, o que é e para que serve um banco de dados?

Quando estamos aprendendo a programar, geralmente fazemos aplicações sem preoculpação com a persistência de dados. Guardamos e fazemos operações sobre os dados em estruturas similares à arrays e listas e, com isso, quando encerramos nossa aplicação os registros simplesmente desaparecem, não ficando guardados para um próximo uso dos mesmos. Por exemplo, imagine a construção de uma aplicação que possui um array de inteiros(int[] a), e em tempo de execução haja o armazenamento do inteiro 2 na primeira posição desse array( a[0] = 2 ) e depois fechamos essa aplicação; em futuras execuções do mesmo não veremos mais o registro que foi inserido nesse array(no caso o número 2). Isso ocorre porque enquanto o programa está em execução, todo seu conteúdo fica na memória principal e portanto, depois de executado, são eliminados da memória. Assim vemos a necessidade de guardar(persistir) nossos dados em algum lugar. Em sistemas simples, geralmente há a persistência de dados em arquivos, porém, quando há a necessidade de manipulações mais complexas, usamos um banco de dados para persistência. O banco de dados fica na memória secundária(disco), por isso ele não é “apagado” após a execução do programa. Então essa é a grande motivação para estudarmos um pouco de banco de dados e seus sistemas gerenciadores, em especial o SQL Server. Mas, onde a linguagem SQL entra nisso?

Bem, como já sabemos ONDE guadar e de onde recuperar os registros de uma aplicação, agora veremos COMO fazer isso. É aí que “entra em campo” a linguagem SQL. Essa linguagem foi criada nos anos 70 juntamente com o conceito de banco de dados relacional, por pesquisas patrocinadas pela IBM. O SQL é uma linguagem padrão que serve tanto para manipulação quanto para definição de dados. Com ela, além da possibilidade de inserir, deletar, pesquisar e alterar registros em um banco de dados, podemos também definir e contruir relações(tabelas). Ela é trabalhada sobre o paradigma declarativo. Hoje em dia vemos vários sistemas de banco de dados, como os da Oracle, Postgree, MySQL, SQL Server entre outros. Porém, mesmo que cada um desses bancos tenha sua própria implementação do padrão SQL, existe uma parte básica comum a todos eles. Veremos agora alguns exemplos que usam a linguagem SQL.

Imagine que se tenha uma aplicação bancária(quanta originalidade) e queremos guardar todos os clientes e contas de um banco. Cada cliente possui um cpf, nome e idade. Cada conta possui um número, saldo e referência para seu dono(cliente). Então teremos que usar a linguagem SQL para criar e manipular tais estruturas. A sintaxe SQL para esse exemplo funciona assim:

CREATE TABLE CLIENTE (
CPF VARCHAR2(14) NOT NULL,
NOME VARCHAR2(50) NOT NULL,
IDADE INT;
CONSTRAINT “PK_CLIENTE ” PRIMARY KEY (CPF )
);

INSERT INTO Cliente(cpf,nome,idade) VALUES (111, ‘Lucas’21);

INSERT INTO Cliente(cpf,nome,idade) VALUES (222, ‘Flavio’21);

e assim em diante…

CFF NOME IDADE
111 Lucas 21
222 Flavio 21
333 Joao Paulo 20
444 Amirton 20
555 Daniel 23

Observando a sintaxe, vemos a criação da tabela Cliente e seus campos com o comando “create table Cliente“. Após isso adicionamos registros à tabela com o comando “Insert into Cliente values…“.

Similarmente, faço a criação da tabela para guardar as contas. Nela se observa um campo(CPF_CLIENTE) que guarda a referência para o possuidor da conta. O cliente Lucas, por exemplo, possui a conta de número “1” e saldo “100”.

NUMERO SALDO CPF_CLIENTE
1 100 111
2 200 222
3 300 333
4 400 444
5 500 555

A partir daí podemos fazer consultas sobre as tabelas, por exemplo:

SELECT * FROM CLIENTE //Seleciona todos os clientes do banco

SELECT c.NUMERO FROM CONTA c WHERE c.SALDO > 300 //Seleciona o número de todas as contas com saldo maior que 300

Existem no mercado várias ferramentas que facilitam o acesso a banco de dados, destacando o Hibernate. Elas tentam abstrair ao máximo qual repositório de dados o usuário está usando; porém, por “baixo dos panos” tudo é baseado em SQL.

A idéia desse artigo foi de fornecer uma motivação para o uso de banco de dados e da linguagem SQL. Por isso não houve a necessidade de nos prendermos muito a detalhes de sintaxe. Em próximas aulas da célula, como as de SQL Server e acesso à dados com ASP.NET iremos nos aprofundar um pouco mais.

Publicado em Aulas. Leave a Comment »

Introdução ao C# e ao Visual Studio 2005

Bem pessoal, para reforçar a aula da última quinta-feira, e também não deixar os que não puderam comparecer totalmente atrasados, irei escrever aqui um resumo/tutorial do que foi citado, explicado e ensinado na aula.

Para começar, a primeira informação que precisamos é o que é C#? C# é uma linguagem de programação recente, com menos de 10 anos de existência, desenvolvida pela Microsoft para o lançamento conjunto com o .NET Framework 1.0. A equipe de desenvolvimento da linguagem teve como líder Anders Hejlsberg (pronuncia-se “Rélsberg”), conhecido pela participação em projetos como o Delphi e Turbo Pascal na Borland, e do Visual J++, na Microsoft. Com toda a experiência de seus projetos anteriores, Hejlsberg conhecia as limitações das linguagens existentes até o momento, e também sabia quais características destas linguagens geralmente levavam os programadores a cometer erros. Estas limitações e excessos levaram a Microsoft à decisão de criar uma nova linguagem a ser lançada junto com seu Framework, e que fosse o mais parecida com a estrutura interna deste quanto fosse possível. Ao ser alocado como líder do desenvolvimento da nova linguagem, Hejlsberg e sua equipe decidiram que esta seria inspirada principalmente em C++, Java e Delphi, e herdaria as seguintes características destas e de outras linguagens já existentes:

  • Uso de uma sintaxe consolidada: A sintaxe utilizada em C, C++ e Java é muito difundida entre os programadores, o que torna o aprendizado da nova linguagem mais rápido e menos traumático, além do uso de “{ }” para delimitar trechos de código deixar o programa mais legível e menos suscetível a erros;
  • Orientação a Objetos: Paradigma amplamente difundido, que permite a modelagem de sistemas que refletem o mundo em que a aplicação está inserida;
  • Garbage Collecion: Tira das mãos do programador a necessidade de alocar e desalocar memória, fonte de muitos erros em programadores inexperientes, e de dores de cabeça proporcionais ao tamanho o sistema que está sendo desenvolvido;
  • Exceções: Desvia o fluxo de execução quando um erro ocorre, permitindo que este erro seja tratado de maneira elegante, e muitas vezes transparente ao usuário;
  • Tipos seguros: As atribuições devem ocorrer entre tipos compatíveis em tempo de compilação, e os casts são verificados em tempo de execução;
  • Limites dos arrays são verificados: Assim como Java, C# não permite que por exemplo, num de 5 posições, o programador tente acessar a posição 10. A não verificação dos limites de arrays é mais uma causa de frequentes erros em programadores C / C++.

Além destas características, C# também trouxe novidades, como:

  • Delegates: Funcionam como “ponteiros” de função, facilitando a implementação de eventos, e inclusive dando a possibilidade de multicast, quando um evento dispara mais de uma função;
  • Propriedades: Não é um conceito completamente novo, no entanto, a abordagem de acesso a propriedades no código-fonte não era difundida. As propriedades em C# servem por exemplo, para encapsular os atributos de uma classe, papel que seria desempenhado em Java por métodos get e set;
  • Namespace: Assim como as propriedades, a novidade não está no namespace em si, mas na maneira como são usados. Primeiramente, o namespace não está fisicamente ligado ao caminho do arquivo. Uma classe de namespace Ufpe.Cin.CinDotNet não precisa estar numa estrutura em pastas ..\Ufpe\Cin\CinDotNet. Outra diferença para o uso de namespaces, agora comparando com C++, é que os namespaces de C# não permitiriam o uso de maneira semelhante a “std::cout” (Código em C++ onde std é o namespace e cout é uma variável), pois um namespace pode conter apenas:
    • Outro namespace
    • Classes
    • Interfaces
    • Structs
    • Enums
    • Delegates
  • Partial Class: Em C#, você pode definir uma classe em mais de um arquivo. Apesar de no primeiro momento isto parecer uma regressão, onde você diminuiria a legibilidade do código por espalhar uma classe em vários arquivos, as partial classes usadas corretamente são de grande ajuda para a legibilidade. O uso de partial class ao criar páginas usando ASP.NET permite o uso de code behind de uma maneira elegante (antes da inclusão de partial class em C#, o code behind era implementado através de uma herança entre a classe que define a interface e a classe que contém a lógica. Com partial class, existe apenas uma classe, onde sua interface gráfica é definida em um arquivo e sua lógica em outro).

Para maiores informações, exemplos de código, referências e leituras complementares sobre o que foi falado acima sobre C#, recomendo vocês darem uma olhada na apresentação usada na aula, disponível em (http://www.cin.ufpe.br/~abc/cindotnet/IntroducaoCSharpVisualStudio.pptx), na solução da prática do final da apresentação (http://www.cin.ufpe.br/~abc/cindotnet/ExemploCalculadora.zip) e no material do programa Desenvolvedor 5 Estrelas (http://www.msdn.com.br/cinco_estrelas).

Agora que você já tem uma noção do que C# oferece, vamos dar uma olhada no Visual Studio.

O Visual Studio (VS) é uma ferramenta integrada de desenvolvimento, no mercado desde 1997, atualmente na versão 2008. Com o VS, podemos desenvolver qualquer tipo de aplicação, desde um sistema baseado em Console, passando por aplicações desktop em janela, e indo até jogos 3D e websites. Iremos focar na versão 2005, pois *por enquanto* é a versão que está instalada nos laboratórios do CIn, mas esperamos ansiosamente que em breve pelo menos um grad esteja com o Visual 2008 instalado.

Através do Visual Studio.NET 2005, podemos realizar a maioria das atividades referentes ao desenvolvimento de uma aplicação em um só lugar. Além de editar, compilar e debugar o código em um só lugar, podemos também visualizar bancos de dados, informações sobre servidores na rede, visualizar o log de eventos das máquinas, entre diversas outras ações. Isto reduz o tempo de desenvolvimento, pois não precisamos alternar entre aplicações, boa parte do que é necessário já está disponível no Visual Studio.

A velocidade de desenvolvimento (produtividade do programador) é um dos principais focos do VS. Esta busca por produtividade trouxe para o Visual ferramentas que reduzem muito a quantidade de código que precisa ser digitada. Entre elas, é interessante citar as seguintes:

  • Intellisense: Um sistema de autocomplete que visa minimizar a quantidade de código digitado e a quantidade de itens que o programador necessita memorizar. Através do Intellisense, o programador também tem acesso à documentação dos métodos, o que praticamente elimina o tempo “perdido” em ir ler a API. Em alguns casos, a sugestão do autocomplete é sensivel ao histórico do que vinha sendo codificado.
  • Code Snippets: Templates de código que também reduzem a quantidade de código digitado. Ao usar um code snippet, o desenvolvedor obtém a parte “invariável” do template e apenas precisa preencher as partes mais relacionadas ao seu programa. Exemplo: ao escrever um switch, caso a variável seja algum enum, o Visual irá escrever uma cláusula case para cada valor no enum, automaticamente. Para usar, digite o começo do nome de algum code snippet (como “swi” para o caso do switch) e pressione TAB duas vezes.
  • Comentários em XML: Funciona de maneira similar a JavaDocs. Após implementar um método, ao digitar “///” (três barras) na linha anterior à assinatura do método, o Visual Studio irá criar uma estrutura dentro de um comentário, já no formato do XML de documentação. Resta ao programador apenas preencher as informações inerentes a cada método. Este comentário é usado pelo Intellisense para mostrar a documentação do método.
  • Visualizador de Propriedades: Através da interface gráfica, é possível setar as propriedades dos componentes, reduzindo novamente o número de código digitado.

Outro fato interessante sobre o Visual Studio é a possibilidade de utilizar diversas linguagens (são aproximadamente 40, de acordo com http://dotnetpowered.com/languages.aspx). Além disto, é possível fazer com que projetos escritos em uma linguagem interajam com um projeto escrito em outra, devido à compilação de qualquer uma das linguagens utilizáveis com o VS ser realizada para o código IL (também conhecido como MSIL ou CIL), do .NET Framework.

O último ponto importante do VS que será tratado neste artigo é “como se desenvolver usando o Visual Studio”. Apesar de estarmos acostumados com o termo “Projeto” para designar toda a aplicação que estamos desenvolvendo, a Microsoft utiliza no VS a terminologia de Solução. Uma solução é um conjunto lógico de projetos que se propõem a resolver um determinado problema. Você pode tanto desenvolver apenas um projeto em uma solução, como pode modularizar cada parte deste projeto em outros projetos, que irão se comunicar entre si, poderão ter configurações diferentes (e inclusive ser escritos em linguagens diferentes, como já foi citado), entre outras diversas vantagens.

Além de conhecer o C# e o Visual Studio, é bom saber que apesar de C# ser uma ótima linguagem, que permite o desenvolvimento de maneira rápida e “segura”, e do VS ser um ótimo ambiente de desenvolvimento, com diversas facilidades para o programador, boa parte do que é falado e creditado a C# ou ao Visual Studio é de responsabilidade do .NET Framework.

Resumidamente, podemos dizer que o .NET Framework possui um conjunto de bibliotecas que contém diversas funcionalidades previamente implementadas de maneira eficiente, para tirar do programador a responsabilidade por implementá-las, geralmente com um código muito menos eficiente do que a implementação já existente. É interessante notar que boa parte das Class Libraries (nome dado a cada biblioteca contida no Framework) do .NET Framework foi escrita em C#.

Já existem, padronizadas pela ISO e ECMA, Class Libraries responsáveis pela manipulação de listas, dicionários e hashtables, acesso a dados, entrada e saída, manipulação de texto, desenho e diagnóstico do programa, entre inúmeras outras. Além das Class Libraries padronizadas, o .NET Framework ainda disponibiliza várias outras, para manipulação de XML, interface gráfica por meio de janelas ou interface gráfica para desenvolvimente de websites.

Bem pessoal, resumidamente, este foi o conteúdo visto na aula. Espero que vocês usem este artigo e a apresentação como referência, enquanto dão seus primeiros passos nestas tecnologias.