Licão 2 - The SqlConnection Object

Started by ÐλяkFeλя, 25 de March , 2009, 11:57:11 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ÐλяkFeλя

Licão 2 - The SqlConnection Object

Esta lição descreve o objeto SqlConnection e como
conectar a uma base de dados. Aqui estão os objectivos:

Saiba o que os objetos são utilizados para a conexão.

Saiba como instanciar um objeto SqlConnection.

Entenda como o SqlConnection objeto é utilizado em
aplicações.

Compreender a importância de uma ligação efectiva ao longo da vida
gerenciamento.

Introdução

A primeira coisa que você precisará fazer quando interage com uma base de dados é a de criar uma ligação. A ligação avisa o resto do ADO.NET código que ele está falando a base de dados. Ele gerencia todo o baixo nível lógica associada com o banco de dados específico protocolos. Isso torna fácil para você, porque a maioria dos trabalhos que você terá que fazer no código é instanciar o objeto de conexão aberta a ligação e, em seguida, fechar a ligação quando estiver feito. Devido à forma que as outras classes em ADO.NET são construídas, muitas vezes você não tem ainda muito trabalho a fazer isso.

Embora trabalhando com ligações é muito fácil no ADO.NET, você precisa entender conexões a fim de tomar as decisões acertadas quando codifica seus dados acesso rotinas. Entenda que uma ligação é um valioso recurso. Claro, se você tiver uma aplicação stand-alone cliente que funciona em uma única base de dados um uma máquina, você provavelmente não se importam com isso. No entanto, pensar em uma empresa aplicação onde centenas de usuários ao longo de uma empresa estão acessando a mesma base de dados. Cada conexão representa gerais e só pode haver uma quantidade finita deles. Para olhar para um caso mais extremo, considerar um Web site que está a ser atingida com centenas de milhares de visitas por dia. Aplicações que peguem conexões e não deixá-los ir podem ter graves impactos negativos sobre o desempenho e escalabilidade.

Criando um Objeto SqlConnection

Um SqlConnection é um objeto, tal como qualquer outro objeto C #. Na maioria das vezes, basta declarar e instanciar o SqlConnection todas ao mesmo tempo, conforme mostrado abaixo:

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


O objeto SqlConnection instanciados acima usa um construtor com um único argumento do tipo string. Este argumento é chamado de uma seqüência de conexão. A Tabela 1 descreve partes comuns de uma seqüência de conexão.

Tabela 1. ADO.NET Connection Strings conter certas chave / valor pares para especificar como fazer uma conexão de dados. Elas incluem a localização, nome do banco de dados e credenciais de segurança.


Connection String Parameter Name               Description

Data Source                                               Identifica o servidor. Poderia ser máquina local, a máquina domínio
                                                                nome ou endereço IP.


Initial Catalog                                               Database name.

Integrated Security                                       Defina a SSPI para fazer conexão com o usuário do login do Windows

User ID                                                       Nome de utilizador configuradas no SQL Server.

Password                                                       Senha correspondência SQL Server User ID.


Integrated Security é seguro quando estiver em uma única máquina fazer desenvolvimento. No entanto, muitas vezes você irá querer especificar de segurança baseado em um SQL Server com o User ID permissões definidas especificamente para a aplicação que você está usando. A seguir mostra uma seqüência de conexão, utilizando o User ID e senha parâmetros:

SqlConnection conn = new SqlConnection (
"Data Source = DatabaseServer; Initial Catalog = Northwind; User ID = Seu_ID_de_Usuário; Yourpassword Password =");


Observe como a origem de dados está definido para DatabaseServer para indicar que você pode identificar um banco de dados localizado em uma outra máquina, mais de uma LAN, ou através da Internet. Além disso, User ID e senha substituir o parâmetro de Segurança Integrada.

Usando um SqlConnection

O objectivo de criar um objeto SqlConnection é assim que você pode permitir que outros ADO.NET código para trabalhar com uma base de dados. ADO.NET Outros objetos, como um SqlCommand e um SqlDataAdapter ter uma conexão objeto como um parâmetro. A seqüência de operações que ocorrem na vida de um SqlConnection são os seguintes:

Instantiate o SqlConnection.
Abra a conexão.
Passe a conexão com outros objetos ADO.NET.
Executar operações de dados com o ADO.NET outros objetos.
Fechar a ligação.
Já vi a forma de instanciar um SqlConnection. O resto das medidas, a abertura, passando, usando, e de encerramento são mostrados na Lista 1.

Lista 1 - Using a SqlConnection

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

/// <summary>
/// Demonstrates how to work with SqlConnection objects
/// </summary>
class SqlConnectionDemo
{
    static void Main()
    {
        // 1. Instantiate the connection
        SqlConnection conn = new SqlConnection(
            "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");

        SqlDataReader rdr = null;

        try
        {
            // 2. Open the connection
            conn.Open();

            // 3. Pass the connection to a command object
            SqlCommand cmd = new SqlCommand("select * from Customers", conn);

            //
            // 4. Use the connection
            //

            // get query results
            rdr = cmd.ExecuteReader();

            // print the CustomerID of each record
            while (rdr.Read())
            {
                Console.WriteLine(rdr[0]);
            }
        }
        finally
        {
            // close the reader
            if (rdr != null)
            {
                rdr.Close();
            }

            // 5. Close the connection
            if (conn != null)
            {
                conn.Close();
            }
        }
    }
}



Como mostrado na Listagem 1, você abriu uma conexão com o chamada do método Open () do SqlConnection exemplo, conn. Todas as operações em uma conexão que não foi ainda aberta irá gerar uma exceção. Então, você deve abrir a conexão antes de utilizá-lo.

Antes de utilizar um SqlCommand, você deve deixar o ADO.NET código sei que ligação que ele necessita. Na listagem 1, estabelecemos o segundo parâmetro para o objeto SqlCommand com o SqlConnection objeto, conn. Todas as operações realizadas com o SqlCommand irá usar essa conexão.

O código que usa a conexão é um objeto SqlCommand, que realiza uma consulta sobre a tabela Clientes. O resultado é retornado como um conjunto SqlDataReader e do loop enquanto lê a primeira coluna de cada linha do conjunto de resultados, que é a coluna CódigoDoCliente. Iremos discutir o SqlCommand e SqlDataReader objetos em aulas posteriores. Por agora, é importante para você entender que esses objetos estão usando o objeto SqlConnection para que eles sabem o banco de dados para interagir com.

Quando você é feito usando o objeto de conexão você deve fechá-la. Se não o fizer, poderá ter consequências graves no desempenho e escalabilidade da sua aplicação. Existem algumas questões a serem feitas sobre o que encerra a ligação na Lista 1: o Close () método é chamado em um bloco, e finalmente nós garantir que a ligação não é nulo antes de fechá-lo.

Este exemplo mostrou como usar um objeto com uma SqlConnection SqlDataReader, que exigiam explicitamente fechar a conexão. No entanto, quando se utiliza um modelo de dados desconectado, você não tem que abrir e fechar a conexão sozinho. Veremos como isto funciona quando chegarmos no objeto SqlDataAdapter.



COntINuA....Na proxima parte. Lição 3





By:  FEAR









Triplo X

Muito bom.
Mas me diga: isso é linguagem C? O que faz neste quadro? E por que vc não informou no título do tópico que linguagem é? Eu sempre quis aprender outras linguagens, mas acabo me confundindo porque os autores dos tópicos não postam no título, a linguagem trabalhada.

Isso é só pra melhor organização do fórum mesmo.
O tópico tá 10!

[]s
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

ÐλяkFeλя

#2
Digamos, Lição "2", começe da 1 que ira entender my friend.... 8)

E tipo assim já que não tem uma area voltada ao Ado.net ja que ele é um "objeto" orientado para interagir com com base de dados,  achei melhor colocar nesse quadro de programação, mais qualquer coisa algum moderador mude pra mim se achar necessario, rsrs, fuis triplo X

AQUI

Be.Cool


A sabedoria está em suas mãos

ÐλяkFeλя


Triplo X

#5
Quote from: #ÐλяkFeλя on 30 de March , 2009, 12:11:23 PM
Isso mesmo my friend, c#(sharp)

Por isso mesmo que eu citei que poderia ser postado em :



Se liga na próxima ;)

* PS: Bom, agora que o tópico tem mais de uma linguagem envolvida, e ambas possuem respectivas áreas mas vocês querem insistir em postar foras delas e não tem mais jeito de convencer vocês a mudar mesmo, vou postar tb, mas em Java eu prefiro assim:

package schema;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public final class Conexao{
    public static Connection getConexao(){
        // base de dados é "nome_banco_de_dados"
        String url = "jdbc:mysql://localhost/nome_banco_de_dados";
        String  usuario = "usuario_do_banco";
        String senha = "senha_do_banco";
       
        try{
           Class.forName("com.mysql.jdbc.Driver").newInstance();
           Connection conn = DriverManager.getConnection(url, usuario, senha);
           return conn;
        }
        catch(SQLException ex){
           System.err.println("SQLException: " + ex.getMessage());
           System.err.println("SQLState: " + ex.getSQLState());
           System.err.println("VendorError: " + ex.getErrorCode());
           return null;
        }
        catch(Exception e){
           System.err.println("Problemas ao tentar conectar com o banco de dados");
           return null;
        }
    }
}


Desta forma, a classe está pronta para ser "chamada" por outras classes que utilizarem consultas no banco dados, ou por até páginas JSP mesmo.

Um exemplo em JSP está logo abaixo:
<%@page import="schema.Conexao"%>
<%@page import="java.sql.*"%>
<%

   try {
         
Connection  conn = Conexao.getConexao();
PreparedStatement pstmt = null;
   ResultSet rs = null;

/*   AQUI FICA QUALQUER CONSULTA REALIZADA NA PÁGINA  */

} catch (SQLException ex) {
    out.println("Excessão na consulta!");
}
   
%>


flw ae moçada!
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

drb

#6
Humm... bom ÐλяkFeλя
pra quem quiser fazer conexao usando java + mysql, no caso se ser outro banco apenas sera nessesario usar uma URL (conexao com o banco) diferente e o drive diferente! :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao
{
        //supondo que o banco mysql tenha uma base de dados chamado teste, e tenha o usuario root com a senha 123456 e que //esteja rodando na sua propria maquina.
private static String url =
"jdbc:mysql://localhost/teste?user=root&password=123456";
private static Connection conexao;
public static String status;
public static Connection getConexao()
{
// neste metodo será feita a conexao
// com o banco de dados

try {
// a conexao eh feita em 2 passos:
//   - carregar o driver do banco de dados
Class.forName("com.mysql.jdbc.Driver");
//   - usar o driver para fazer a conexao
        conexao = DriverManager.getConnection(url);
        status = "open";

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conexao;
}
public static void main(String[] args) {
Conexao.getConexao();
System.out.println(status);
}
}


nao utilizei o finally para fechar o banco como o ÐλяkFeλя, aconcelho usar o catch para tratar as execoes corretamente!

obs: Ao meu ver o assunto aqui naum e o c# e sim o SQLConnection, por esse motivo disponibilizei na linguagem JAVA!

drb

Quote
out.println("Excessão na consulta!");
????

QuotePreparedStatement pstmt = null;
Não vejo de nada produtivo em fazer um PreparedStatement nula, você não deveria fazer um sem passar uma String SQL (Boas Praticas de Programação).
E a unica diferença foi que você quebro a String url que o DriveManager usa para a canexao e imprimir as menssagens que o Banco retorna e o estado do banco, que não muda muito se mandar imprimir o log da pilha do banco!

E por fim, deixei um detalhe fora para ver se alguem pudesse perceber! Mas para fazer a conexão com um banco, voçê PRECISA ter o drive dele! Não adianta fazer essa chamada do drive no codigo, sem o compilador souber aonde ele está! Por esse motivo, você precisa baixar no site do Banco de Dados o drive para a conexao! E "mostrar" ao compilador aonde o drive está, e quanto a isso não tem  :'( .

E quanto ao lugar do post:
Isso é uma programação, por que colocar um post sobre SQLConnection , em java no lugar do java, em C# (I DON'T LIKE) no lugar do C#, em Delphi no lugar do Delphi... faz aqui mesmo em Programação, e coloca em todas as linguagens que quiser sobre o SQLConnection, por que no caso o titulo é : 
The SqlConnection Object

So não me vão procurar um tutorial no google e da um CTRL+C CTRL+V aqui!
Isso tambem é assunto basico !
sem mais.

Triplo X

#8
É tem razão, e foi por isso que eu criei a linha

Quote/*   AQUI FICA QUALQUER CONSULTA REALIZADA NA PÁGINA  */

A consulta fica lá.
Acho que não precisava eu mensionar isso, ou precisava?!
Quem quizesse saber sobre conexão com banco de dados era só dar uma olhada nos tópicos que perdi noites de sono criando para outras pessoas estudarem, e até me agradeceram por isso, vocês deveriam consultar a área JAVA primeiro, antes de postar o que ja existe.

Bom, só estava mostrando um exemplo básico, como estou vendo que você nem sequer deve ter consultado a sessão JAVA, pois lá você viria que eu já expliquei tudo isso que você mesmo mensionou.

Vou refrescar sua memória:

JAVA

Programação para WEB com tecnologia JEE5  (Lida 207 vezes)

JSP - Upload de vários arquivos  (Lida 185 vezes)

Já possuo diversos sites em JAVA, e reconhecidos até, não me venha dizer como postar, sendo que este conteúdo JAVA já existe aqui no fórum.

E o tópico só se tornou parte de outras linguagens quando foi incluívo JAVA no meio, antes disso ele era pra ser postado em C# sim, não viu a imagem que postei, tem uma área pra isso lá.

aff
sem + digo eu.
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

drb

#9
QuoteJá possuo diversos sites em JAVA, e reconhecidos até, não me venha dizer como postar, sendo que este conteúdo JAVA já existe aqui no fórum.

Nao vi ninguem pedi sobre o que voce faz na vida!

QuoteE o tópico só se tornou parte de outras linguagens quando foi incluívo JAVA no meio, antes disso ele era pra ser postado em C# sim, não viu a imagem que postei, tem uma área pra isso lá.

O AUTOR (ÐλяkFeλя) nao mensionou a linguagem! mencionou? caraio! Ele deu o exemplo em C#!

QuoteBom, só estava mostrando um exemplo básico, como estou vendo que você nem sequer deve ter consultado a sessão JAVA, pois lá você viria que eu já expliquei tudo isso que você mesmo mensionou

Fui eu que di o exemplo pratico aqui PRIMEIRO, voce editou seu texto para parecer que foi vc! Assim sujo o meu post com outro quase igual!
E quando alguem vem aqui e coloka dez vezes o mesmo tutorial (ex: SQLinjection), ninguem fala nada, que dizer falam: "muito bom o post!"

QuoteA consulta fica lá.
Cara tu viu o nome da sua classe? desde quando uma classe CONEXAO faz consulta? Ja que voce disse que  SABE nao vou menssionar como que faz consultas, em que classe abstrata (ops, ja disse) se faz padroes e as classes especificas  extend o padrao para fazer consultas especificas!
Sei que e um exemplo basico, mas para quem ta vendo de primeira vai aprender errado!

Triplo X

Quando mensionei que a consulta ficaria lá, eu disse sobre a página JSP.
Pensei que você entenderia que ela (a página JSP) faz uma chamada à classe de Conexão JAVA para poder acessar o banco e realizar uma consulta.

Deixa pra lá, faça o que quiser.
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...