Sunteți pe pagina 1din 6

5.2.

3 Modelo Conectado x Modelo Desconectado

J escutei muita gente discutir qual o melhor modelo. Mas no existe isso!!! Gostaria
que vocs entendessem que o que existe : O melhor modelo para uma determinada
situao.
Ento antes de qualquer projeto estudem o melhor modelo, as vantagens e as
desvantagens de cada um para aquele distema.
5.2.4 Objetos utilizados nos modelos

1. String de Conexo
2. SqlConnection
3. SqlDataAdapter
4. SqlCommand
5. DataSet
6. SqlDataReader
Logo no incio (2 anos atrs), quando comecei a estudar C#, eu realmente no entendia
a utilizao desses objetos. Conseguia at fazer as coisas, apenas porque decorava.
Ento para no cometerem o mesmo erro que eu, vamos entender quando se utilizar
cada objeto desse.
1. String de Conexo j foi muito discutido no tpico 5.1;
2. SqlConnection Objeto que de acordo com uma string de conexo ir se

conectar com a base. Esta classe contem vrias propriedades com informaes e
mtodos para manipular a conexo com o banco;
3. DataSet - uma estrutura bastante complexa e parecida com nosso banco de

dados, so que manipulada em memria. O objeto contm tabelas (assim como


o banco) com linhas e colunas. muito utilizado em todo o framework .NET,
mas uma das utilizaes bsicas nos modelos desconectados.
4. SqlDataAdapter Utilizado no modelo desconectado. O DataSet por se s no

consegue se conectar ao banco. Ele no sabe nada da nossa base de dados. Ento
o nico modo de preenchermos nosso dataset com dados vindos do banco qual
? Lgico, atrves de um objeto intermedirio que vai ser uma ponte entre a
conexo e o DataSet (por exemplo).
5. SqlCommand Utilizado no modelo conectado. E serve bsicamente para

executar comandos no banco. Ento para cada comando que vai ser realizado em
cima do banco (INSERT, UPDATE, SELECT, DELETE) ser necessrio um
objeto desta classe.
6. SqlDataReader Utilizado explicitamente no modelo conectado.Sabem os

ponteiros para arquivos em C/C++?Pois . Este objeto trabalha de maneira bem


semelhante, sendo da mesma forma forward-only e read-only, ou seja esse
ponteiro ir andar apenas para frente e ser apenas leitura.Ele ir apontar para
resultados de um SqlCommand (que so sempre resultados em forma de tabelas,

consequentemente [agora sem trema :D], o datareader ir apontar sempre para


uma linha desta tabela).
6. Acessando base com C#
Finalmente chegamos na parte boa, depois de muito conceito vem a prtica. Neste
primeiro post iremos trabalhar com o modelo conectado.
6.1 Criando a nossa classe bsica (Pessoa)

Vamos, primeiramente, criar nossa classe bsica, a classe Pessoa que ir conter como
propriedade todas as colunas de nossa tabela Pessoa. Essa classe ser utilizada
bsicamente em todas as operaes dos nossos exemplos.
6.2 Algoritmo Bsicos do Modelo Conectado

Se conexo fechada
Abrir conexo
Cria comando que ir manipular o banco
Executa comando
Fecha Conexo com o banco
Como d para ver bem simples o fluxo das operaes ao acessar o banco de dados.
Obs: Uma coisa muito importante que vocs no devem esquecer jamais de fechar a
conexo depois de j ter operado no banco. como fala o meu chefe: abra a conexo
o mais tarde que poder, e feche o mais cedo possvel.
Isso se deve ao fato que ficar consumindo a conexo com o banco por muito tempo
desnessariamente prejudicial aplicao.
6.3 Inserindo registros no banco
public class Program
2: {
3:
static Pessoa GetPessoa()
4:
{
5:
Pessoa pessoa = new Pessoa();
6:
Console.WriteLine("Nome ");
7:
pessoa.Nome = Console.ReadLine();
8:
Console.WriteLine("Email ");
9:
pessoa.Email = Console.ReadLine();
10:
Console.WriteLine("Sexo (M ou F) ");
11:
pessoa.Sexo = Convert.ToChar(Console.ReadLine());
12:
Console.WriteLine("Data de Nascimento");
13:
pessoa.DataNascimento = Convert.ToDateTime(Console.ReadLine());
14:
return pessoa;
15:
}
16:

17:
static void Main(string[] args)
18:
{
19:
//
20:
//chama um mtodo que ir preencher um objeto Pessoa de acordo com
entradas do usurio
21:
//
22:
Pessoa newPessoa = GetPessoa();
23:
24:
//
25:
//string de conexo que informa dados do banco que irei acessar
26:
//
27:
string connectionString = @"Data Source=.\SQL;Initial
Catalog=EstudoBlog;Integrated Security=True;Pooling=False";
28:
29:
//
30:
// Query TSQL com comando que irei realizar no banco.
31:
//
32:
string query = "INSERT INTO Pessoa (nome, dataNascimento, sexo, email)
values (@nome, @dataNascimento, @sexo, @email)";
33:
34:
SqlConnection conn = null;
35:
try
36:
{
37:
//
38:
//instncia da conexo
39:
//
40:
conn = new SqlConnection(connectionString);
41:
42:
//
43:
//verifica se conexo est fechada, se tiver abre.
44:
//
45:
if (conn.State == ConnectionState.Closed)
46:
{
47:
//
48:
//abre conexo
49:
//
50:
conn.Open();
51:
}
52:
53:
//
54:
// Criao do objeto comando, que recebe a query que ser utilizada na
operao e a conexo com o banco.
55:
//
56:
SqlCommand cmd = new SqlCommand(query, conn);
57:
58:
//
59:
// Adiciona parametros ao comando
60:
//
61:
cmd.Parameters.Add(new SqlParameter("nome", newPessoa.Nome));
62:
cmd.Parameters.Add(new SqlParameter("dataNascimento",
newPessoa.DataNascimento));
63:
cmd.Parameters.Add(new SqlParameter("sexo", newPessoa.Sexo));
64:
cmd.Parameters.Add(new SqlParameter("email", newPessoa.Email));
65:
66:
//
67:
// Executa comando
68:
//
69:
cmd.ExecuteNonQuery();

70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95: }

//
// Fecha conexo com o banco
//
conn.Close();
Console.WriteLine("Pessoa Cadastrada com sucesso!!!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
//
// Garante que a conexo ser fechada mesmo que ocorra algum erro.
// No existe problema em fechar uma conexo duas vezes.
// O problema esta em abrir uma conexo duas vezes.
//
if (conn != null)
{
conn.Close();
}
}
}

6.3 Recuperando registros do banco

O modo de recuperar dados do banco, bastante parecido com o modo de inserir.


Uma coisa que muda e que vale chamar ateno so em trs mtodos da classe
SqlCommand:
1. ExecuteNonQuery: Executa qualquer comando que no tenha retorno, ou seja,
esse mtodo no retorna nada (INSERT, UPDATE)
2. ExecuteReader: Executa comandos que retornem alguma coisa (SELECT)
3. ExecuteScalar: Retorna a primeira linha e a primeira coluna do comando.
O nosso cdigo ficar da seguinte maneira:
1: public class Program
2:
{
3:
static void Main(string[] args)
4:
{
5:
//
6:
//string de conexo que informa dados do banco que irei acessar
7:
//
8:
string connectionString = @"Data Source=.\SQL;Initial
Catalog=EstudoBlog;Integrated Security=True;Pooling=False";
9:
10:
//
11:
// Query TSQL com comando que irei realizar no banco.
12:
//

13:
string query = "SELECT * FROM Pessoa";
14:
15:
SqlDataReader reader = null;
16:
SqlConnection conn = null;
17:
18:
try
19:
{
20:
//
21:
//instncia da conexo
22:
//
23:
conn = new SqlConnection(connectionString);
24:
25:
//
26:
//verifica se conexo est fechada, se tiver abre.
27:
//
28:
if (conn.State == ConnectionState.Closed)
29:
{
30:
//
31:
//abre conexo
32:
//
33:
conn.Open();
34:
}
35:
36:
//
37:
// Criao do objeto comando, que recebe a query que ser
utilizada na operao e a conexo com o banco.
38:
//
39:
SqlCommand cmd = new SqlCommand(query, conn);
40:
41:
//
42:
// Executa comando
43:
//
44:
reader = cmd.ExecuteReader();
45:
46:
//
47:
//interage com a tabela retornada
48:
//
49:
while (reader.Read())
50:
{
51:
Console.Write(reader["nome"].ToString() + " - ");
52:
Console.WriteLine(reader["email"].ToString());
53:
}
54:
55:
//
56:
// Fecha conexo com o banco
57:
//
58:
conn.Close();
59:
}
60:
catch (Exception ex)
61:
{
62:
Console.WriteLine(ex.Message);
63:
}
64:
finally
65:
{
66:
//
67:
// Garante que a conexo ser fechada mesmo que ocorra algum erro.
68:
// No existe problema em fechar uma conexo duas vezes.
69:
// O problema esta em abrir uma conexo duas vezes.

70:
71:
72:
73:
74:
75:
76:
77:

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

S-ar putea să vă placă și