C# - ADO .NET para Iniciantes - II


Este é um minicurso sobre ADO .NET para iniciantes usando a linguagem C#.

Esta chegando agora ???

Então acompanhe o primeiro artigo:

Os requisitos mínimos para que você aproveite este mini-curso é possuir um pouco de conhecimento sobre lógica de programação.

Se você não conhece a linguagem C# pode ler os seguintes artigos :

Se você já conhece VB .NET e esta querendo a aprender C# sugiro que você leia o meu artigo:

O material necessário para acompanhar o curso é: (Irei utilizar o Visual C# 2008 Express Edition)

1- Visual C# 2008 Express Edition
2- SharpDevelop 2.2
3- SQL Server 2005 Express Edition

Todos esses programas são gratuitos e portanto você não vai gastar um centavo neste curso.

Durante o curso vamos desenvolver uma aplicação com acesso a dados usando C# de forma que você irá fazendo e aprendendo na prática os principais conceitos básicos envolvidos.

Mas chega de papo e vamos ao que interessa...

As Classes e os  Namespaces da ADO .NET

O seis principais namespaces (espaços de nome) da ADO .NET são mostrados abaixo resumidamente :

Namespaces Descrição
System.Data É o principal espaço de nomes da ADO .NET e contém as classes usadas por todos os provedores; classes que representam tabelas, colunas, linhas e também a classe DataSet. Além disso possui diversas interfaces como IDbCommand, IDbConnection, e IDbDataAdapter que são usadas por todos os provedores gerenciados.
System.Data.Commom Define as classes comuns usadas como classes base para os provedores de dados. Todos eles compartilham estas classes. Ex: DbConnection e DbDataAdapter.
System.Data.OleDb Define classes que trabalham com fonte de dados OLE DB usando o provedor .NET OleDb.
System.Data.Odbc Define classes que trabalham com fonte de dados ODBC usando o provedor .NET Odbc.
System.Data.SqlClient Define classes que trabalham com fonte de dados SQL Server 7.0 ou superior.
System.Data.SqlTypes Define classes que representam tipos de dados específicos para o SQL Server.

A ADO .NET possui 3 tipos distintos de classes referenciadas como:

Os provedores de dados contém objetos Connection, Command, DataAdatper e DataReader que foram apresentados na primeira parte deste artigo.

Com ADO .NET você primeiro cria um objeto Connection e fornece ao mesmo informação sobre a string de conexão.

A seguir você criar um objeto Command e fornece a ele detalhes da instrução SQL que deverá ser executada. Esta informações pode usar parâmetros.

Se o objeto Command retornar um conjunto de registros e você decidir usá-lo deverá criar um objeto DataAdapter e preencher um objeto DataSet ou DataTable.

Usando o objeto Connection

Um objeto Connection cria uma ligação  (ou conexão) com uma fonte de dados específica. Este objeto deve conter a informação necessária para se conectar a fonte de dados usando informações como o provedor, o caminho da base de dados, o usuário e a senha (se necessário). Esta informação esta contida na string de conexão. Esta informação também pode ser armazenada no arquivo web.config , em um arquivo texto, no registro do windows, etc.

Cada tipo de provedor de dados possui um objeto connection específico, assim um provedor de dados que trabalha com uma fonte de dados SQL Server inclui uma classe SqlConnection  que realiza este tipo de operação. Já um provedor que trabalha com uma fonte de dados OLE DB possui uma classe OleDbConnection.

Obs: Podemos também efetuar a conexão com outros banco de dados como MySQL, FireBird, PostGreSQL , DB2, etc. Neste caso será necessário usar um conector apropriado geralmente fornecido pelo fabricante ou usar um provedor de dados ODBC(não muito recomendável).

De forma geral podemos descrever as propriedades para uma classe Connection assim :

Propriedade Descrição
ConnectionString Contém informações pelo objeto Connection para efetuar a conexão com o banco de dados;
DataBase Retorna o nome do banco de dados após a conexão ser aberta;
DataSource Retorna o nome da instância do banco de dados usado pelo objeto Connection;
State Retorna o estado atual da conexão: Valores possíveis :
  • Broken
  • Closed
  • Connecting
  • Executing
  • Fetching
  • Open

A seguir temos o trecho de código genérico usado para efetuar a conexão com o SQL Server :

using System.Data;
using
System.Data.SqlClient;

            //1-definição das informações para montar a string de conexão
            string Server = "localhost";
            string Username = "usuario";
            string Password = "senha";
            string Database = "banco de dados";
            //2-montagem da string de conexão
            string ConnectionString = "Data Source=" + Server + ";";
                     ConnectionString += "User ID=" + Username + ";";
                     ConnectionString += "Password=" + Password + ";";
                     ConnectionString += "Initial Catalog=" + Database;
       //3-cria uma instância do objeto Connection em memória
            SqlConnection SQLConnection = new SqlConnection();
            try
            {
                //4- atribui a string de conexão e abre a conexão
                SQLConnection.ConnectionString = ConnectionString;
                SQLConnection.Open();
                //realiza alguma operação
                ......
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }

Para a conexão com o SQL Server podemos também declarar e instanciar o objeto SqlConnection ao mesmo tempo conforme o código abaixo:

SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");

Neste caso o objeto SqlConnection instanciado usa um construtor com um único argumento do tipo string , a famosa string de conexão. Veja a seguir sua descrição detalhada :

Data Source Identifica o servidor e pode ser a máquina local (localhost), um dns ou um endereço IP.
Initial Catalog O nome do banco de dados
Integrated Security Defina para SSPI para fazer a conexão usando a autenticação do WIndows.(Usar Integrated Security é seguro somente quando você esta em uma máquina fora da rede)
User ID Nome do usuário definido no SQL Server.
Password Senha do usuário definida no SQL Server.

Um exemplo de conexão com o meu servidor MAC/SQLEXPRESS usando o banco de dados Northwind.mdf com o usuário macoratti e senha 123456 seria:

SqlConnection conn = new SqlConnection("Data Source=MAC/SQLEXPRESS;Initial Catalog=Northwind;User ID=macoratti;Password=123456");

A sequência de operações que ocorrem quando da abertura de uma conexão pode ser resumida assim:

  • Instancia um objeto SqlConnection ou OledbConnection;
  • Abre a conexão;
  • Passa a conexão para outro objeto ADO .NET(command);
  • Realiza a operação no banco de dados(uma consulta);
  • Fecha a conexão;
  • Um exemplo completo bem simples pode ser visto a seguir:

    using System;
    using System.Data;
    using System.Data.SqlClient;

    /// <summary>
    ///
    Demonstra como trabalhar abrir uma conexão com SqlConnection
    /// </summary>
    class SqlConnectionDemo{

    static void Main()
    {
       // 1. Instancia a conexão(objeto SqlConnection)
     
     SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI");
      
    //
       // define um SqlDataReader nulo
       SqlDataReader dr = null;
    try
     
    {
        // 2. Abre a conexão
       
    conn.Open();
        // 3. Passa conexão para o objeto command
        
    SqlCommand cmd = new SqlCommand("select * from Customers", conn);
       //
       // 4. Usa conexão
       // obtêm o resultado da consulta
     
     dr = cmd.ExecuteReader();
       // imprime o codigo do cliente para cada registro
      
    while (dr.Read())
       {
          Console.WriteLine(dr[0]);
        }
     }
     finally
     
    {
        // fecha o reader
        
    if (dr != null)
        {
          dr.Close();
        }
        // 5. Fecha a conexão
     
      if (conn != null)
        {
           conn.Close();
        }
     }
    }
    }

    O código usa um objeto SqlCommand o qual realiza uma consulta na tabela Customers.

    O resultado é retornado como um SqlDataReader e o loop While percorre e lê a primeira coluna de cada linha do conjunto de registros retornados que é a coluna CustomerID. (poderíamos ter obtido mais colunas como dr[1], dr[2], etc.)

    Nota: Podemos também obter os dados das colunas pelo nome dos campos : Ex: dr["CustomerID"].

    Ao usar o objeto Connection você deve sempre ter o cuidado de fechá-lo caso contrário haverá impacto no desempenho da sua aplicação, por isso estou usando um bloco Try/Finally, onde o bloco Finally garante que a conexão será fechada pois sempre será executado.

    Note que tomamos a precaução de verificar se a conexão e o objeto DataReader eram nulos antes de fechá-los para evitar uma exceção.

    Este exemplo mostra como usar o SqlConnection com o objeto SqlDataReader o qual requer que a conexão seja fechada explicitamente.

    No próximo artigo irei falar sobre o objeto SqlCommand.

    Eu sei é apenas C# mas eu gosto...

    Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

    Quer migrar para o VB .NET ?

    Quer aprender C# ??

     

                 Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
     

    Referências:


    José Carlos Macoratti