.Net – Conectando-se a um banco de dados

Basicamente, em um projeto .Net a conexão com um banco de dados é como no esquema abaixo. Através de um provider teremos objetos específicos que servirão para a manipulação de dados em um banco. Esse tutorial trata de uma conexão com SQL Server 2008. As alterações ao se utiliza-las com outros bancos de dados são poucas – altera-se logicamente o provider e a connection string do object conection.

Object Connection

O Object Connection é utilizado para fazer a conexão com o banco de dados e existe um para cada tipo de provider. É ele que permite o pooling de conexões.
A conexão acontece através de uma string, como no exemplo abaixo:
[sourcecode language=”csharp”] SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Data Source=localhost;" +
"Integrated Security=SSPI;" +
"Initial Catalog=Northwind";
[/sourcecode]

Object Command

O Object Command é utilizado em comandos no banco de dados. Pode ser criado através de uma conexão – para se definir o comando que será executado no banco, utilize a função CommandText.

[sourcecode language=”csharp”] SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT * FROM Tabela";
[/sourcecode]

Como existem diversos tipos de comandos que podemos executar em um banco de dados – insert, update, delete, por exemplo, existem também vários tipos de execução de um object command – ou vários tipos de commandtext.
Eles são:

  • ExecuteNonQuery():     Não retorna nenhum tipo de dado, apenas o número de células afetadas.
[sourcecode language=”csharp”] SqlConnection cnn = new SqlConnection(
"Data Source=localhost;" +
"Initial Catalog=Videos;Integrated
Security=True");
SqlCommand cmd = new SqlCommand("UPDATE titulos SET
Nome = ‘Sem Nome’ WHERE Nome = ”", cnn);
cnn.Open();
int qtidade =cmd.ExecuteNonQuery();
Console.WriteLine(qtidade + " linhas foram
afetadas.");
cnn.Close();
[/sourcecode]
  • ExecuteScalar(): Retorna um único objeto – scalar
[sourcecode language=”csharp”] SqlConnection cnn = new SqlConnection(
"Data Source=localhost;" +
"Initial Catalog=Videos;Integrated
Security=True");
SqlCommand cmd = new SqlCommand("SELECT COUNT(*)
FROM titulos", cnn);
cnn.Open();
object qtidade = cmd.ExecuteScalar();
Console.WriteLine("Existem " + (int)qtidade + "
títulos");
cnn.Close();

[/sourcecode]
    • ExecuteDataReader(): Retorna um objeto DataReader, com o resultado da consulta – é utilizada para a leitura de dados após uma querie ser executada, mas não permite a alteração desses dados. Toda a leitura é feita sequencialmente.

Para ler o conteúdo de um campo específico utilizamos:

[sourcecode language=”csharp”] SqlDataReader dr = cmd.ExecuteReader();
string str = dr["NomeDoCampo"];
[/sourcecode]

Para acessar o próximo registro da sequência:

[sourcecode language=”csharp”] dr.Read();
[/sourcecode]

Exemplo de Uso:

[sourcecode language=”csharp”] SqlConnection cn = new SqlConnection("Data Source=localhost;" +
"Integrated Security=SSPI;" +
"Initial Catalog=Northwind");

SqlCommand cmd = new SqlCommand("select * from Customers", cn);

cn.Open();

SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read()) {
comboBox1.Add(dr["CompanyName"]); // Adiciona dado à um comboBox.
}

dr.Close();
cn.Close();

[/sourcecode]

Exemplo de Uso 2:

[sourcecode language=”csharp”] SqlConnection cn = new SqlConnection("Data Source=localhost;“+
"Integrated Security=SSPI;" +
"Initial Catalog=Northwind");

SqlCommand cmd = new SqlCommand("select * from Customers", cn);

cn.Open();

DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader()); // Adiciona automaticamente todos os dados em um DataTable
cn.Close();

[/sourcecode]
  • ExecuteXMLReader(): Retorna um XMLReader.

Não se esqueça que ao realizar qualquer tipo de consulta em seu banco de dados é necessário utilizar técnicas para evitar ataques. Não deixe de ler o post . Net – Evitando ataques por SQL Injection.

// Comente!

comentários

Olá, eu sou a Gabi e eu criei o "Eu Faço Programas" em 2011, quando ainda trabalhava em desenvolvimento web. Atualmente meu trabalho é focado em estratégia digital e redes sociais. Quer saber mais? www.imgabi.com

4 Comentários

  • Responder junho 22, 2011

    Bruno Salvino

    Com o Entity Framework atualmente, existe algum motivo em específico para usar este método antigo de conexão com o banco de dados?

    • Responder junho 22, 2011

      gabiifonseca

      Eu ainda não trabalhei com o Entity Framework e MySQL, vou até testar aqui porque realmente não sei se funciona.

      Eu ia fazer um post sobre isso depois, estava aqui na minha lista 🙂 Bom, o Entity Framework facilita demais a vida, mas eu sempre acho bom falar dos dois lados da coisa. E acho que mais do que isso, quem está procurando materiais sobre conexão e que provavelmente nunca trabalhou com isso antes, acho importante entender primeiro com a coisa funciona e depois passar para a utilização de frameworks.

    • Responder setembro 13, 2011

      Josie

      I was so confused about what to buy, but this makes it udnesrtandalbe.

// Siga as boas práticas: Comente!