Documente Academic
Documente Profesional
Documente Cultură
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
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
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();
}
}
}
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();
}
}
}
}