ADO.NET e conexão SQL Server


Hoje eu vou escrever este artigo com o objetivo de te mostrar como trabalhar com ADO.NET de maneira fácil, modular e ao mesmo tempo inteligente. Existem vários livros e artigos mostrando como trabalhar com o ADO.NET para iniciantes, como por exemplo: o desenvolvedor cria a conexão pelo Wizard da ferramenta Visual Studio e a string de conexão fica localizada na página ASPX. 

Sinceramente, isto √© horr√≠vel e quem faz esse tipo de conex√£o √© porque est√° com pregui√ßa de fazer o outro tipo ou ent√£o n√£o tem todo entendimento. Era pra eu ter criado este artigo a muito tempo, mas devido os ‚Äúa fazeres‚ÄĚ acabou que n√£o deu para criar. Veja o que foi utilizado para desenvolver este artigo.

Referência
- Ferramenta Visual Studio
- Linguagem C#
- Plataforma Web (e algumas partes podem ser usadas em desktop)
- ADO.NET
- String de conex√£o

Como eu desenvolvo software diariamente e para ter uma certa agilidade eu precisei criar alguns “frameworks" pessoais um que conecta em qualquer banco, um que gera criptografia, outro que gera relatórios em vários formatos e muito mais. Porque eu fiz isso? Para poder ter agilidade, não precisar criar tudo novamente e não ficar copiando e colando de um projeto para o outro.
Eu recomendo que voc√™ crie os seus pr√≥prios ‚Äúframeworks‚ÄĚ para te ajudar no dia a dia do desenvolvimento de software. O que voc√™ tem que se importar √© com o cliente e como o software est√° chegando nele, isto √©, foi atendido tudo que o cliente precisava com o software? Ele est√° flu√≠do, r√°pido e intuitivo? Eu falei um pouco disso em outro artigo, segue o link:

Link:


ADO.NET

O ADO.NET é uma tecnologia criada pela Microsoft para acesso ao banco de dados, ou seja, capaz de fornecer objetos para acesso ao banco de dados. Se você precisa acessar o seu pequeno banco de dados para gerar um relatório, com certeza terá que usar o ADO.NET para se conectar, enviar a instrução SQL e jogar para algum objeto os resultados.

Ele tem suporte a uma variedade de banco de dados e objetos de dados. Existem objetos que depois de pegar os dados, ficam ainda conectados ao banco de dados, outros objetos já trabalham desconectados. A vantagem de estar desconectado é porque os dados podem ser mostrados sem consumir muita banda. A desvantagem é que esses dados retornados precisam ser filtrados, isso porque a memória do servidor é responsável por guardar todos os dados dentro do objeto. Trazer um trilhão de dados e guardar em memória não é uma boa prática; imagina 1 milhão de pessoas acessando cada uma um trilhão de dados no objeto de dados.

No ADO.NET nós temos o DataReader, um objeto que precisa estar conectado ao banco de dados. Temos também o DataTable e DataSet que são objetos que trabalham desconectados do banco de dados, isto é, os dados ficam em memória.

Não existe o objeto melhor ou pior, existe aquela que adequa ao seu eco-sistema tecnológico.

Acesso

Por padrão o ADO.NET provê acesso aos seguintes bancos de dados: SQL Server (System.Data.SqlClient), OLEDB (System.Data.OleDb), ODBC (System.Data.Odbc) e Oracle (System.Data.OracleClient).

Connection

Os objetos de conexão para cada um deles se dá em seguida:  SqlConnection, OleDbConnection, OdbcConnection e OracleConnection. Isso quer dizer que um desses comandos precisa ser utilizado para conectar o sistema ao banco de dados. Hoje em dia, essa dependência de sistema e banco de dados é cada vez maior. Sem banco de dados ou qualquer outro objeto que guarda dados seu sistema não é nada.

Comandos

Os comandos que precisam ser enviados ao banco de dados para utilização dos seguintes objetos: SqlCommand, OleDbCommand, OdbcCommand e OracleCommand). Você adiciona uma instrução como o INSERT e manda para o banco através de algum objeto Command.


Objetos de leitura


Outros objetos importantes são os de leitura de dados. Nós temos os seguintes: SqlDataReader, OleDbDataReader, OdbcDataReader e OracleDataReader. Note que só é mudado o início do objeto pois o resto segue o mesmo nome. Dentro de cada objeto desses existem as particularidades de cada um, não se esqueça disso. O nome é parecido por questão de facilidade.


Objetos adaptados


Os objetos adaptados são aqueles que não precisam ficar conectados a todo tempo, basta só conectar, buscar e desconectar. O objeto terá todos os registros necessários buscados. Veja: SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter e OracleDataAdapter. Todos esses adaptadores precisam preencher o objeto chamado DataSet e nele todos os valores ficarão em memória. Veja a figura 1.

Figura 1 - Mostrando os objetos e suas rela√ß√Ķes

Note que tudo começa do provedor de dados, que no nosso caso é o ADO.NET. Depois existe o objeto de conexão que se divide em pelo menos três outros objetos. Nesse caso, os outros três podem se conectar diretamente ao objeto Connection. Note que o objeto DataAdapter possui uma extensão que é o DataSet. Esse objeto já não precisa estar conectado.


Depois de enviar o comando e buscar os dados, ao inv√©s de ir para o DataReader, passa para o DataAdapter e depois para o DataSet. Lembre-se tamb√©m que as tr√™s linhas est√£o relacionadas em uma mesma dire√ß√£o, isto √©, todos precisam se conectar ao banco de dados para executar alguma tarefa. O √ļnico que n√£o precisa da conex√£o ou estar conectado √© o DataSet, por isso que ele est√° fora do alinhamento.


Conectar


O que é preciso fazer para o sistema se conectar ao banco de dados? O primeiro passo é ter o banco de dados. O segundo é saber o nome do servidor, usuário, senha e nome do banco. Se isso é praticamente impossível buscar ou enviar comandos para o banco. Quando o desenvolvedor sabe que a conexão entre o site e o banco é segura, a string de conexão fica um pouco diferente da normal, mas depois falaremos disso.


Exemplo

Os exemplos que gosto de fazer são os que eu realmente uso no dia a dia programando software, dessa forma, o que será mostrado aqui é criado na mão, diferente do software criado pelo Wizard da ferramenta.

O primeiro passo do exemplo é referente ao banco de dados. Eu já tenho o banco de dados SQL Server instalado em minha máquina, isto é, instalado localmente ou na nuvem se você precisar. O meu servidor de banco de dados chama-se MAURICIOJUNE8F0\MSSQLSERVER_2012. Veja a figura 2.

Figura 2 - Nome do banco de dados criado


A figura 2 mostra o nome do banco de dados chamado BDTeste. Porque do BD? Apenas uma escolha pessoal que significa ‚ÄúBanco de Dados‚ÄĚ Teste. Eu peguei as primeiras letras do nome. Mas voc√™ pode colocar o nome que quiser.

Depois do banco de dados criado, é necessário criar o projeto no Visual Studio. Eu criei um projeto do tipo WebApplication com ASP.NET Web Application e Web Forms. Veja a figura 3 e figura 4.

Figura 3 - Criando um novo projeto

Note que eu criei o projeto na linguagem Visual C# e escolhi a opção Web. Depois de dar o nome do projeto, cliquei no botão Ok que me mostra a segunda tela.

Figura 4 - Escolhendo o projeto do tipo Web Forms.


O projeto Web Forms √© um pouco diferente dos outros projetos. √Č um projeto simples e ao mesmo tempo com template web. Depois de clicar Ok, o projeto √© criado e o arquivo de configura√ß√£o do projeto j√° vem com suas tags espec√≠ficas. A figura 5 mostra todo o projeto e arquivos criados.


Figura 5 - Arquivos do projeto


O √ļltimo arquivo √© chamado de arquivo de configura√ß√£o. Clique duas vezes no Web.config. Existe uma tag chamada que pode ser adicionada as strings de conex√£o com nomes espec√≠ficos e dentro do C# pode ser pego usando a chave nome. O c√≥digo 1 mostra essa tag.

  < connectionStrings >

    <add name="ConexaoSQLServerLocal" connectionString="Data Source=nome do servidor; User=user; Password=senha; Initial Catalog=nome do banco de dados"/>

  < / connectionStrings >

Código 1 - String de conexão


Dentro da tag < connectionStrings > voc√™ pode adicionar v√°rias tags com as configura√ß√Ķes necess√°rias. Isto quer dizer que o seu site ou sistema pode conectar em mais de servidor de banco de dados ao mesmo tempo. Por exemplo, eu posso adicionar um banco sql server local e um outro hospedado na nuvem. Ou posso adicionar um banco SQL Server e outro Oracle sem qualquer problema.

Vamos analisar toda tag dentro de < connectionStrings >.

√Č necess√°rio abrir a tag add para iniciar o auto-complete da ferramenta. A propriedade name pode ser um nome qualquer que voc√™ pega dentro do c√≥digo C#. Depois de uma propriedade, coloque sempre o valor entre aspas duplas. Nesse caso add name=‚ÄúConexaoSQLServerLocal‚ÄĚ.

A pr√≥xima propriedade √© a connectionString=‚ÄúData Source‚ÄĚ. Essa tag tamb√©m √© importante pois nela n√≥s temos todos os dados do servidor como o nome do servidor, nome do usu√°rio, senha para se conectar e o nome do banco de dados que deseja conectar. A cada informa√ß√£o e valor, voc√™ precisa prestar aten√ß√£o pois existe o sinal de igual e quando come√ßar outra propriedade, deve-se colocar um ponto e v√≠rgula. Voc√™ tem que prestar aten√ß√£o para colocar o nome do servidor corretamente e o usu√°rio deve ter permiss√£o para acessar o banco de dados indicado na string.

name = Equivale ao nome que irá usar internamente ou dentro do código;

connectioString = Essa propriedade deve conter todos os dados para conectar-se ao banco de dados;


A primeira propriedade dentro da connectionString √© o nome do servidor. Separado por ponto e v√≠rgula a pr√≥xima propriedade √© o User=usuario; que acessa o banco de dados, a pr√≥xima √© o Password=senha; daquele usu√°rio. Note que depois do igual n√£o se usa aspas duplas. A √ļltima propriedade dentro da connectionString √© a Initial Catalog=BDTeste respons√°vel por indicar o nome do banco de dados, no nosso caso o BDTeste.

Depois de tudo definido e entendido, vamos passar para o código em C#. Veja o código 2.


using System.Data;

using System.Data.SqlClient;

protected void Page_Load(object sender, EventArgs e)

{

using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConexaoSQLServerLocal"].ToString()))

            {

                try

                {

                    connection.Open();

                }

                catch (Exception ex)

                {

                    throw ex;

                }

                finally

                {

                    connection.Close();

                }

            }

}

Código 2 - Escrevendo o código C# e abrindo a conexão.


Importe as classes System.Data e System.Data.SqlClient para ter acesso aos objetos estudados anteriormente. Dentro do m√©todo chamado Page_Load acessei o SqlConnection passando como par√Ęmetro o nome a conex√£o criada no arquivo de configura√ß√£o.

Para pegar a conexão pelo nome, basta usar o método ConnectionStrings. Veja o código 3.


System.Configuration.ConfigurationManager.ConnectionStrings["ConexaoSQLServerLocal"].ToString()

Código 3 - Pegando o pelo nome.


√Č necess√°rio passar o valor dentro da SqlConnection (classe usada para conectar ao banco de dados do tipo SQL Server). Dentro do Try eu adicionei o nome da vari√°vel criada e chamei um m√©todo Open(). Se as informa√ß√Ķes do banco de dados estiverem corretas, o m√©todo open ser√° executado sem qualquer problema. Caso aconte√ßa um erro, a linha de c√≥digo vai para o catch e no finalizar, a conex√£o √© fechada com o Close().


Como tarefa de casa, fa√ßa o mesmo exemplo e teste se a conex√£o abriu normalmente. Espero que tenha gostado e qualquer d√ļvida, favor entrar em contato pelo site www.mauriciojunior.org.