A maior rede de estudos do Brasil

Grátis
244 pág.
Desenvolvimento Web - MVC

Pré-visualização | Página 5 de 41

um SGDB. Utilizando um
driver de conexão, os desenvolvedores das aplicações não manipulam diretamente as mensagens
binárias trocadas entre as aplicações e os SGDBs.
Mais Sobre
Em alguns casos, o protocolo binário de um determinado SGDB é fechado. Consequen-
temente, a única maneira de se comunicar com ele é através de um driver de conexão
oferecido pelo fabricante desse SGDB.
ODBC
Suponha que os proprietários dos bancos de dados desenvolvessem os drivers de maneira total-
mente independente. Consequentemente, cada driver teria sua própria interface, ou seja, seu pró-
prio conjunto de instruções. Dessa maneira, o desenvolvedor da aplicação precisa conhecer as ins-
truções de cada um dos drivers dos respectivos bancos que ele for utilizar.
Para facilitar o trabalho do desenvolvedor da aplicação, a Microsoft® definiu uma especificação
chamada ODBC (Open Database Connectivity) para padronizar a interface dos drivers de conexão.
Assim, quando uma empresa proprietária de um banco de dados pretende desenvolver um driver,
ela segue essa especificação com o intuito de popularizá-lo.
Os drivers de conexão que respeitam a especificação ODBC, ou seja, possuem um conjunto de
comandos padronizados, são chamados de drivers de conexão ODBC.
ODBC Manager
Para que drivers ODBC possam ser instalados em uma máquina e as aplicações consigam utilizá-los
é necessário ter o ODBC Manager, que já vem instalado no Windows®.
O driver de conexão ODBC já está disponível para utilização, podemos consultar o ODBC Mana-
ger do Windows®. O ODBC Manager pode ser executado através do item Ferramentas Administrati-
vas do Painel de Controle.
www.facebook.com/k19treinamentos 25
ADO.NET 26
Criando uma conexão
Com o driver de conexão ODBC instalado na máquina já é possível criar uma conexão com o banco
de dados correspondente. O que é necessário para estabelecer uma conexão com o banco de dados?
• Escolher o driver de conexão;
• Definir a localização do banco de dados;
• Informar o nome da base de dados;
• Ter um usuário e senha cadastrados no banco de dados.
Todas essas informações são definidas na chamada string de conexão.
1 string stringDeConexao = @"driver ={SQL Server };
2 server=MARCELO -PC\SQLEXPRESS;database=livraria;uid=sa;pwd=sa;";
Código C# 2.1: Definindo a string de conexão
Após a definição da string de conexão, podemos utilizar a classe System.Data.Odbc.OdbcConnec-
tion do .NET Framework. Essa classe é responsável por criar conexões ODBC.
1 OdbcConnection conexao = new OdbcConnection(stringDeConexao);
Código C# 2.2: Criando uma conexão ODBC
Inserindo registros
Estabelecida a conexão com o banco de dados, já podemos executar comandos. Por exemplo, é pos-
sível inserir registros nas tabelas. O primeiro passo para executar um comando é defini-lo em lin-
guagem SQL de acordo com a sintaxe do SGDB utilizado.
26 www.k19.com.br
27 ADO.NET
1 string textoDoComando = @"INSERT INTO Editoras (Nome , Email)
2 VALUES (’Abril ’, ’abril@email.com ’);";
Mais Sobre
O caractere “@” antes de um valor literal do tipo string indica que os caracteres dentro
da string não devem ser processados como caracteres especiais.
Em seguida, devemos criar um objeto da classe System. Data.Odbc.OdbcCommand a partir do
código sql e da conexão previamente criados. O comando não é executado quando os objetos dessa
classe são instanciados.
1 OdbcCommand comando = new OdbcCommand(textoDoComando , conexao);
Código C# 2.4: Criando um comando ODBC
Por fim, o comando pode ser executado através do método ExecuteNonQuery(). A conexão deve
ser aberta antes de executar o comando.
1 conexao.Open();
2 comando.ExecuteNonQuery ();
Importante
A mesma conexão pode ser reaproveitada para executar várias operações. Quando não
houver mais operações a serem executadas, devemos finalizar a conexão ODBC através
do método Close(). Finalizar as conexões ODBC que não são mais necessárias é importante
pois libera recursos no SGBD.
1 conexao.close();
Código C# 2.6: Finalizando uma conexão ODBC
Mais Sobre
Em C#, para evitar que o uma conexão não seja fechada após a sua utilização, podemos
aplicar um bloco using.
1 using (OdbcConnection conexao = new OdbcConnection(stringDeConexao))
2 {
3 // utiliza a conexao
4 }
Código C# 2.7: Utilizando um bloco using
No código acima, quando o bloco using que está associado à conexão ODBC terminar, automa-
ticamente, essa conexão será fechada.
Exercícios de Fixação
www.facebook.com/k19treinamentos 27
ADO.NET 28
1 Crie um projeto do tipo Console Application no Microsoft Visual C# Express, chamado
ODBC.
2 Crie uma classe chamada InsereEditora no projeto ODBC para inserir registros na tabela Edi-
toras.
1 using System.Data.Odbc;
2
3 namespace Odbc
4 {
5 class InsereEditora
6 {
7 static void Main(string [] args)
8 {
9 string stringDeConexao = @"driver ={SQL Server };
10 server=MARCELO -PC\SQLEXPRESS;database=livraria;uid=sa;pwd=sa;";
11
12 System.Console.Write("Digite o Nome da Editora:");
13 string nome = System.Console.ReadLine ();
14
15 System.Console.Write("Digite o Email da Editora:");
16 string email = System.Console.ReadLine ();
17
18 string textoInsereEditora =
19 @"INSERT INTO Editoras (Nome , Email)
20 VALUES(’" + nome + @"’, ’" + email + @"’)";
21
22 using (OdbcConnection conexao = new OdbcConnection(stringDeConexao))
23 {
24 OdbcCommand command = new OdbcCommand(textoInsereEditora , conexao);
25 conexao.Open();
26 command.ExecuteNonQuery ();
27 }
28 }
29 }
30 }
Código C# 2.8: InsereEditora.cs
Exercícios Complementares
1 Crie uma classe chamada InsereLivro no projeto ODBC para inserir registros na tabela Livros.
SQL Injection
A implementação da inserção de registros feita anteriormente possui uma falha grave. Os dados ob-
tidos do usuário através do teclado não são tratados antes de serem enviados para o SGDB.
Esses dados podem conter caracteres especiais. Se esses caracteres não são tratados, o compor-
tamento esperado da operação é afetado. Eventualmente, registros não são inseridos como deveriam
ou brechas de segurança podem se abrir.
Por exemplo, considere a classe InsereEditora do exercício de fixação. Se o usuário digitar
28 www.k19.com.br
29 ADO.NET
“O’Reilly” e “oreilly@email.com”, o código SQL gerado pela aplicação seria:
1 INSERT INTO Editoras (nome , email) VALUES (’O’Reilly ’, ’oreilly@email.com ’)
Observe que o caractere aspas simples aparece cinco vezes no código SQL acima. O SGDB não
saberia dizer onde de fato termina o nome da editora. Ao tentar executar esse código, um erro de
sintaxe é lançado pelo SQL Server. Para resolver esse problema manualmente, devemos adicionar
dois caracteres “”’ seguidos.
1 INSERT INTO Editoras (nome , email) VALUES (’O’’Reilly ’, ’oreilly@email.com ’)
Os valores recebidos dos usuários devem ser analisados e os caracteres especiais contidos nesses
valores devem ser tratados. Esse processo é extremamente trabalhoso, pois o conjunto de caracteres
especiais e a forma de tratá-los é diferente em cada SGDB.
A responsabilidade do tratamento dos caracteres especiais contidos nos valores de entrada dos
usuários pode ser repassada para os drivers ODBC. Dessa forma, o código das aplicações se torna
independente das particularidades desse processo para cada SGDB.
Mais Sobre
O processo de tratamento dos caracteres especiais das entradas dos usuários é denomi-
nado sanitize.
1 // pegando os dados da editora pelo teclado
2 string nome = System.Console.ReadLine ();
3 string email = System.Console.ReadLine ();
4
5 // definindo a sentença SQL com parâmetros
6 string textoDoComando =
7 @"INSERT INTO Editoras (Nome , Email) VALUES (?, ?);";
8
9 // criando um comando odbc
10 OdbcCommand comando = new OdbcCommand(textoDoComando , conexao);
11
12 // atribuindo valores aos parâmetros
13 comando.Parameters.AddWithValue("@Nome", nome);
14