Banco de Dados - c#

6
5.2.3 Modelo Conectado x Modelo Desconectado Já escutei muita gente discutir qual o melhor modelo. Mas não existe isso!!! Gostaria que vocês entendessem que o que existe é: “O melhor modelo para uma determinada situação.” Então 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 Conexão 2. SqlConnection 3. SqlDataAdapter 4. SqlCommand 5. DataSet 6. SqlDataReader Logo no início (2 anos atrás), quando comecei a estudar C#, eu realmente não entendia a utilização desses objetos. Conseguia até fazer as coisas, apenas porque decorava. Então para não cometerem o mesmo erro que eu, vamos entender quando se utilizar cada objeto desse. 1. String de Conexão – já foi muito discutido no tópico 5.1; 2. SqlConnection – Objeto que de acordo com uma string de conexão irá se conectar com a base. Esta classe contem várias propriedades com informações e métodos para manipular a conexão com o banco; 3. DataSet - É uma estrutura bastante complexa e parecida com nosso banco de dados, so que é manipulada em memória. O objeto contém tabelas (assim como o banco) com linhas e colunas. É muito utilizado em todo o framework .NET, mas uma das utilizações básicas é nos modelos desconectados. 4. SqlDataAdapter – Utilizado no modelo desconectado. O DataSet por se só não consegue se conectar ao banco. Ele não sabe nada da nossa base de dados. Então o único modo de preenchermos nosso dataset com dados vindos do banco qual é? Lógico, atráves de um objeto

description

banco de dados

Transcript of Banco de Dados - c#

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 bancoExecuta comandoFecha Conexo com o bancoComo 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 bancopublic 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: // Fecha conexo com o banco 73: // 74: conn.Close();

75: 76: Console.WriteLine("Pessoa Cadastrada com sucesso!!!");

77: }

78: catch (Exception ex)

79: {

80: Console.WriteLine(ex.Message);

81: }

82: finally 83: {

84: // 85: // Garante que a conexo ser fechada mesmo que ocorra algum erro. 86: // No existe problema em fechar uma conexo duas vezes. 87: // O problema esta em abrir uma conexo duas vezes. 88: // 89: if (conn != null)

90: {

91: conn.Close();

92: }

93: }

94: }

95: }

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: if (conn != null)

72: {

73: conn.Close();

74: }

75: }

76: }

77: }