Você está na página 1de 19

Aprendendo a Programar

Capítulo IX
Conectar os dados ao aplicativo
Introdução
• Veremos como fazemos para armazenar todas as informações
que consideremos importantes, para serem persistentes
depois de ter desligado nosso sistema e que podamos utilizá-
las ao ligar o computador novamente.
• Para tanto, utilizaremos duas técnicas principais: ODBC e LINQ
• Ambas foram desenvolvidas pela Microsoft, mas são muito
diferentes entre si. OBDC é um padrão aberto e é a maneira
básica de se conectar aos bancos de dados. LINQ é uma
ferramenta de nova geração que permite utilizar o servidor de
banco de dados de maneira mais simples e com uma
linguagem mais natural.
ODBC
• A primeira maneira de se conectar a nosso servidor de BD e manusear
informações. ODBC visa a acessar qualquer dado a partir de qualquer
sistema, independentemente do sistema de gerenciamento de bancos
de dados que armazene os dados (em nosso caso, o MS SQL Server
Express).
• O propósito de ODBC é traduzir as consultas do aplicativo em
comandos que entenda o Gestor de BD. Para isso funcionar, temos que
fazer com que tanto o aplicativo quanto o Gestor sejam compatíveis
com OBDC. Isso quer dizer que nosso sistema deve ter instruções
específicas ODBC e o Gestor deve ser capaz de responder a elas.
• Uma das maneiras de fazê-lo é com um software gerenciador, ou driver,
no cliente, encarregado da comunicação com o banco de dados. O
driver interpreta as conexões e chamadas SQL e as traduz.
ODBC
• O ODBC .NET Data Provider é um componente adicional do kit de
desenvolvimento de .NET (SDK). Permite acessar controladores ODBC
nativos. Embora nos permita utilizar drivers para diversos tipos de bancos
de dados, por ser uma tecnologia padrão, o site de downloads da
Microsoft indica que somente foi testado com os controladores da
Microsoft SQL ODBC, Microsoft Oracle ODBC e Microsoft Jet ODBC.
• ODBC está composto de um driver e um gerenciador de controladores. O
driver é específico para o produto de um fornecedor de banco de dados.
Por exemplo, a Oracle fornece um controlador (ou driver) para trabalhar
com um sistema da Oracle. O gerenciador de controladores é utilizado
para instalar os arquivos necessários e configurar fontes de dados para
ser utilizados em aplicativos. Nos sistemas baseados em Windows, o
Gerenciador de origens de dados ODBC é utilizado para criar e manter
conexões ODBC.
Instalação do ODBC
• Para instalar o ODBC, primeiro devemos fazer
um download do sítio:
https://msdn.microsoft.com/pt-br/library/ms71
4563?f=255&MSPPError=-2147217396
• Precisamos, também, do Microsoft Data Acess
Components do sítio:
http://msdn2.microsoft.com/en-us/data/aa9376
95.aspx
Instalação do ODBC
• Depois de ter instalado ambos os componentes, devemos continuar com
os passos a seguir:
1. Iniciamos Microsoft Visual Studio NET.
2. Criamos um projeto novo de Visual C# Windows Application. Form1 é adicionado
ao projeto automaticamente.
3. No menu Projeto, clicamos em Adicionar referência.
4. Na assa .NET, clicamos em Microsoft.Data.ODBC.dll. Depois de
Microsoft.Data.ODBC.dll. aparecer na lista de componentes selecionados,
clicamos em Aceitar.
5. Mudem para a visão Código e adicionem o código seguinte imediatamente,
depois das outras instruções using:
• using System.Data;
• using Microsoft.Data.Odbc;
6. Adicionamos um controle Button a Form1 e etiquetamos esse controle SQL
Server.
Instalação do ODBC
7. Agora, adicionamos o código seguinte ao botão SQL Server
{
OdbcConnection cn;
OdbcCommand cmd;
string MyString;
 
MyString="Select * from Customers";
 
cn= new OdbcConnection("Driver={SQL Server};Server=mySQLServer;UID=sa;
PWD=myPassword;Database=Northwind;");
 
cmd=new OdbcCommand(MyString,cn);
cn.Open();
 
MessageBox.Show("Connected");
 
cn.Close();

}
8. Alteremos as cadeias OdbcConnection, se corresponder, para seu entorno
Elementos de ODBC
• Alguns dos elementos que podemos utilizar ao instalar o
controlador ODBC são:
– OdbcConnection: É utilizado para nos conectar a uma fonte de dados
ODBC. O nome atribuído à fonte de dados ODBC, durante sua
configuração, é utilizado para acessá-la.
– OdbcCommand: É utilizado para executar um comando SQL em uma
conexão.
– OdbcDataReader: nos permite percorrer os resultados de uma consulta.
– OdbcParameter: É utilizado para enlaçar um parâmetro a um comando.
– OdbcDataAdapter: É utilizado para preencher um objeto DataSet a partir
de uma fonte de dados ODBC.
– OdbcCommandBuilder: Cria default Insert, Update e Delete para um
adaptador de dados ODBC.
Exemplo de ODBC
• Agora, vamos mostrar outro exemplo, criando um projeto
vazio em C#. O exemplo a seguir utiliza alguns dos
elementos que mencionamos. Utiliza uma fonte de dados
ODBC previamente estabelecida (chamada Test). O nome
DSN (nome da fonte de dados) é utilizado na cadeia de
conexão, junto à identificação de usuário e senha para
acessar o banco de dados. Uma expressão SQL básica é
utilizada para recuperar todas as filas de uma tabela
Clientes com os valores das colunas exibidas. Finalmente,
a conexão é fechada, junto aos outros elementos. O
código C # seguinte:
Exemplo de ODBC
using System;
using Microsoft.Data.Odbc;
namespace BuilderODBC {
class TestClass {
static void Main(string[] args) {
string connectionString = "DSN=Test;UID=Chester;Pwd=Tester;";
string sql = "SELECT CustomerID, ContactName, ContactTitle FROM Customers";
OdbcConnection conn= new OdbcConnection(connectionString);
conn.Open();
OdbcCommand comm = new OdbcCommand(sql, conn);
OdbcDataReader dr = comm.ExecuteReader();
while (dr.Read()) {
Console.WriteLine(dr.GetValue(0).ToString());
Console.WriteLine(dr.GetValue(1).ToString());
Console.WriteLine(dr.GetValue(2).ToString());
}
conn.Close();
dr.Close();
comm.Dispose();
conn.Dispose();
}}}
LINQ
• Em 2008, a Microsoft apresentou LINQ dentro do Visual Studio.
Ele estende a linguagem de programação adicionando as
expressões de consulta, as quais são semelhantes às expressões
SQL. Podem ser utilizadas para extrair, de maneira simples,
dados de arrays, classes enumeráveis, documentos XML,
bancos de dados relacionais e fontes de dados de terceiros.
• Todas as operações de consulta LINQ são compostas de três
ações diferentes:
– Obter a fonte de dados.
– Criar a consulta.
– Executar a consulta.
Exemplo de LINQ
• Nesse código, podemos ver um exemplo de LINQ para consultar um array de dados. Isso pode ser feito, também, diretamente em um servidor de
banco de dados:
 
class IntroToLINQ
{
static void Main()
{
// 1. Fonte de dados.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
 
// 2.Criação da consulta
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;
 
// 3.Executar a consulta
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
}
}
LINQ to SQL
• O que precisamos é utilizar um banco como fonte de dados.
Para tanto, devemos utilizar o chamado LINQ to SQL.
• No LINQ to SQL, o modelo de dados de um banco de dados
relacional é atribuído a um modelo de objetos expressado
na linguagem de programação utilizada. Ao executar o
aplicativo, o LINQ to SQL traduz em SQL as consultas que
escrevemos no modelo de objetos, e as envia para o banco
de dados para ser executadas. Quando o banco de dados
retornar os resultados, o LINQ to SQL os traduz novamente
em objetos com os quais nosso sistema pode trabalhar, em
nossa própria linguagem de programação.
LINQ to SQL
• Com o LINQ to SQL, primeiramente criamos um mapeamento objeto-relacional (ou
seja, alguma coisa que comunique a nosso sistema a relação entre os elementos de
meu sistema e os dados do banco), seja manualmente ou seja utilizando o Designer
Relacional de Objetos (O/R Designer). Escrevemos as consultas nos objetos e, em
tempo de execução, o LINQ to SQL se encarrega da comunicação com o banco de
dados. No exemplo a seguir, os clientes representam uma tabela específica no banco
de dados, e o tipo do resultado da consulta, IQueryable <T>, deriva de IEnumerable.
 
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
 
// Query for customers in London.
IQueryable<Customer> custQuery =
from cust in db.Customers
where cust.City == "London"
select cust;
Outros conceitos: stress
• Os testes de stress são testes feitos de maneira deliberadamente
intensa, utilizada para determinar a estabilidade de um sistema.
O objetivo é testar nosso aplicativo além de sua capacidade
normal; com frequência, até um ponto de ruptura, visando a
observar os resultados. Os motivos podem incluir:
– determinar os pontos de ruptura ou limites de uso seguro
– cumprimento, ou não, das especificações solicitadas pelo cliente (por
exemplo, que suporte 10 milhões de usuários)
– determinar os modos de falha (o que acontece exatamente quando o
sistema falhar)
– testar o funcionamento estável de uma parte do sistema, ou de todo o
sistema, além do uso padrão
Stress
• Os testes de stress, em geral, deveriam colocar o hardware em níveis
exagerados de stress, visando a garantir a estabilidade quando ele é
utilizado em um entorno normal. Eles podem incluir os extremos de
carga de trabalho, uso de memória, carga térmica (calor), velocidade
de relógio ou tensões. A memória e a CPU são dois componentes
geralmente testados dessa maneira.
• Os testes de stress de software visam a testar a estabilidade, tentando
forçar o sistema para que falhe. Visam a medir e avaliar o máximo
rendimento possível para uma tarefa ou função determinada.
• Em particular, o objetivo desse tipo de teste pode ser garantir que o
software não trave em condições de insuficiência de recursos do
computador (por exemplo, memória ou espaço em disco), alta
concorrência incomum, ou ataques de negação de serviço.
Outros conceitos: segurança
• Precisamos entender que a segurança informática é a
área da informática que focaliza a proteção da
infraestrutura computacional e tudo o que estiver
relacionado a ela, especialmente, as informações
contidas. Para tanto, há padrões, métodos, regras,
ferramentas e leis para minimizar os possíveis riscos que
afetem a infraestrutura ou as informações. A segurança
em um ambiente de rede é a capacidade de identificar e
eliminar vulnerabilidades, ou seja, os pontos através dos
quais possam entrar em nosso sistema ou em nossa
infraestrutura.
Motivos de falhas de segurança
• Usuários: Em alguns casos, suas ações podem provocar problemas de segurança;
embora, na maioria dos casos, seja porque os usuários têm permissões
sobredimensionadas, não têm restrições de ações desnecessárias, etc.
• Programas maliciosos: programas que prejudicam ou utilizam ilicitamente os recursos
do sistema. São instalados (por falta de atenção ou malícia) em nosso computador, e
abrem uma porta para os intrusos ou alteram os dados. Esses programas podem ser
vírus informáticos, worms, trojans, bombas lógicas, spywares, conhecidos geralmente
como malware.
• Erros de programação: A maioria dos erros de programação que podem ser
considerados uma ameaça à segurança são ameaças pelo fato de poder ser utilizados
como exploits pelos crackers. No entanto, há casos nos quais um desenvolvimento
incorreto é considerado uma ameaça.
• Intrusos: pessoa que consegue acessar os dados ou programas sem autorização
(crackers, defacers, hackers, script kiddie ou script boy, viruxers, etc.).
• Pessoal técnico interno: Os principais motivos são: problemas internos, problemas
trabalhistas, dispensa de trabalhadores, fins lucrativos, espionagem, etc.
Boas práticas de segurança
• No caso de precisar tomar medidas, elas podem ser de natureza
diferente:
– Desenvolvimento de sistemas utilizando padrões de codificação para
evitar erros
– Uso de senhas difíceis de conhecer (mais de 8 caracteres, com letras,
números e símbolos)
– Uso correto das permissões fornecidas aos usuários
– Cópias de segurança frequentes de nossos dados e programas
– Manutenção de nossos servidores com todas as atualizações de segurança
em vigor
– Instalação de antivírus
• Se mantermos essas boas práticas, garantimos um sistema seguro e
estável, que funcione corretamente por muito tempo.

Você também pode gostar