binding source

23
Índice 1. Como criar um Banco de Dados ........................................................................................... 2 2. DataSet................................................................................................................................... 5 2.1. Criando um DataSet......................................................................................................... 5 2.2. Corrigindo o caminho de uma String de Conexão ............................................................ 7 2.3. Criando SQLs e Stored Procedures num TableAdapter .................................................... 9 2.4. Criando uma Stored Procedure a partir do VS2005 ........................................................ 14 3. Desenvolvendo aplicações de acesso a dados utilizando TableAdapter e BindingSource 15 3.1. Principais comandos de um BindingSource.................................................................... 17 4. Desenvolvendo aplicações de acesso a dados utilizando TableAdapter ............................ 18 4.1. Utilizando SQL.............................................................................................................. 18 4.2. Utilizando Stored Procedures ......................................................................................... 20 4.3. Desenvolvendo procedimentos de acesso a dados .......................................................... 21 4.3.1. Executando comandos SQL que não possuem retorno ............................................ 21 4.3.2. Executando comandos SQL que possuem retorno .................................................. 22 4.3.3. Executando Stored Procedures ............................................................................... 23

Upload: jorge-dutra-david-junior

Post on 26-Jun-2015

1.280 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Binding Source

Índice

1. Como criar um Banco de Dados ........................................................................................... 2

2. DataSet................................................................................................................................... 5

2.1. Criando um DataSet......................................................................................................... 5 2.2. Corrigindo o caminho de uma String de Conexão ............................................................ 7 2.3. Criando SQLs e Stored Procedures num TableAdapter .................................................... 9 2.4. Criando uma Stored Procedure a partir do VS2005 ........................................................ 14

3. Desenvolvendo aplicações de acesso a dados utilizando TableAdapter e BindingSource 15

3.1. Principais comandos de um BindingSource.................................................................... 17 4. Desenvolvendo aplicações de acesso a dados utilizando TableAdapter ............................ 18

4.1. Utilizando SQL.............................................................................................................. 18 4.2. Utilizando Stored Procedures......................................................................................... 20 4.3. Desenvolvendo procedimentos de acesso a dados .......................................................... 21

4.3.1. Executando comandos SQL que não possuem retorno............................................ 21 4.3.2. Executando comandos SQL que possuem retorno .................................................. 22 4.3.3. Executando Stored Procedures ............................................................................... 23

Page 2: Binding Source

Acesso a Banco de Dados Utilizando VB.NET 2005

1. Como criar um Banco de Dados A IDE do Visual Studio 2005, permite a criação de banco de dados, tabelas, views e stored procedures. Para se criar um arquivo de Banco de Dados no formato do SQL Server 2005 Express Edition (mdf) deve-se seguir os seguintes passos: 1 – Primeiramente abrir o Server Explorer através do menu View → Server Explorer.

2 – A seguir clicar no botão “Connect to Database”, que ativará a tela de Adição de Conexões.

A tela de adicionar conexões permite abrir um banco de dados existente, ou criar um novo banco de dados. Para isso, informar o caminho onde criar o banco e o nome do banco a ser criado.

Clique em Browse p/ escolher o caminho do arquivo de Banco de Dados que deseja criar ou conectar.

Para alterar o tipo de Banco de Dados que deseja criar ou conectar, clique em Change...

Page 3: Binding Source

3 – Feito isso, será criada uma conexão com o novo banco e a partir dele pode-se criar tabelas, view, stored procedures, funções entre outras coisas. Para isso, é só clicar com o botão direito sobre o item que deseja criar. O exemplo abaixo mostra como criar uma tabela em um banco de dados.

4 – Uma vez adicionada uma nova tabela, basta informar as colunas, o tipo de dados e se o mesmo pode ou não aceitar valores nulos.

Clicando com o botão direito sobre a pasta Tables, será aberto o menu que nos permite adicionar novas tabelas.

Para criar uma Chave Primária, selecionar a coluna desejada com o botão direito e selecionar a opção: Set Primary Key ou selecionar a coluna e clicar no botão de criação de PK da barra de ferramentas.

Pode-se também criar índices e relacionamentos entre as tabelas.

Page 4: Binding Source

5 – Para dar um nome a tabela criada, ou renomear uma tabela existente, ir até a janela de propriedades - menu View → Properties Window e alterar a propriedade Name.

Ao salvar a tabela, se ainda não foi dado um nome para ela, será aberta uma tela para que se informe o nome da mesma.

6 – Uma vez criada uma tabela pode-se alterar sua definição ou até mesmo visualizar, incluir, alterar e excluir registros existentes. Para isso basta clicar com o botão direito sobre a tabela e selecionar a opção “Open Table Definition” para alterar a definição da tabela ou na opção “Show

Table Data” para visualizar e editar os dados da tabela.

Para alterar o nome de uma tabela deve-se alterar a propriedade Name.

Page 5: Binding Source

2. DataSet O DataSet é um banco de dados relacional, cujos dados são armazenados apenas em memória. Trabalha desconectado do banco de dados e tem como características:

• Não sabe a origem dos dados; • Opcionalmente pode ser “tipado”; • Pode ser ligada a DataControls, como DataGridView, por exemplo; • Suporta atualização em lotes; • Conecta-se aos dados físicos com as classes DataAdapter e TableAdapter; • Um único DataSet pode conter dados de múltiplas fontes de dados.

2.1. Criando um DataSet

Para criar um DataSet clicar no menu Project → Add New Item... ou clicar com o botão direito sobre o projeto na Solution Explorer e selecionar a opção New Item...

Selecione então a opção DataSet:

Page 6: Binding Source

Será então criado um DataSet. No DataSet tem a opção de criar tabelas próprias, que existirão apenas em memória, ou então selecionar uma tabela de uma conexão já existente do Server

Explorer, clicar e arrastar para dentro do DataSet.

Dessa forma será criado um esquema da tabela do Banco de Dados (físico) para o DataSet (memória).

Após arrastar uma tabela para um DataSet, automaticamente, é criado um TableAdapter (no exemplo CidadesTableAdapter) para este DataTable (Cidades).

Page 7: Binding Source

O TableAdapter é o componente responsável pela interação dos dados de um DataSet (memória) com o Banco de Dados (físico).

Quando um TableAdapter é criado, são criados comandos SQL de SELECT, INSERT, UPDATE e DELETE. Como veremos adiante, esses comandos podem ser alterados e há possibilidade de criar outras rotinas SQL conforme a necessidade da aplicação. É possível também utilizar Stored Procedures num TableAdapter ao invés de comandos SQL. Os métodos Fill e GetData, são criados juntamente com o TableAdapter e retornam o SELECT padrão definido no TableAdapter. Este SELECT é uma seleção de dados simples que retornam todos os campos de uma tabela sem restrições (clausula WHERE). A diferença entre os métodos Fill e GetData é que o primeiro preenche um DataTable de um DataSet, por exemplo, o DataTable Cidades do DataSet dsTreino mostrado anteriormente. Já o GetData simplesmente retorna o resultado da seleção, sem preencher um DataTable. Se uma base de dados tiver seu caminho alterado, ao tentar alterar um DataSet, ou ao executar operações de banco de dados em tempo de execução será gerado um erro, já que os TableAdapters, responsáveis pela comunicação entre o DataSet e o Banco de Dados, não conseguirão estabelecer comunicação. Para resolver este problema, basta corrigir o caminho da ConnectionString.

2.2. Corrigindo o caminho de uma String de Conexão A string de conexão, normalmente é armazenada na opção Settings do My Project.

Duplo Clique

Page 8: Binding Source

Será aberta então, a tela de configurações do projeto. A partir daí, basta clicar sobre a opção Settings e corrigir o caminho gravado no campo Value como mostra a figura abaixo.

Selecionar a opção Settings

Clique aqui e informe o novo caminho do Banco de Dados

Page 9: Binding Source

2.3. Criando SQLs e Stored Procedures num TableAdapter

Para criar uma query SQL ou uma Stored Procedure através de um TablaAdapter, basta clicar sobre o TableAdapter com o botão direito e clicar sobre a opção Add Query.

Será aberta então, uma janela onde escolhe-se o que deseja fazer: criar uma query SQL, criar uma Stored Procedure ou utilizar uma Stored Procedure existente.

Se selecionar a primeira ou segunda opção (criação de SQL ou stored procedure), e clicar em Next, aparecerá então, a tela a seguir, que nos permitirá escolher o tipo de procedimento que desejamos criar.

Permite adicionar novas Queries

Permite alterar uma Query existente.

Page 10: Binding Source

Quando escolhida uma opção, ao clicar em Next é aberta a tela a seguir já contendo o esboço do comando SQL selecionado.

O botão Query Builder abre um editor visual de comandos SQL.

O botão Execute Query permite testar a consulta SQL desenvolvida.

Page 11: Binding Source

Uma vez criado o SQL, ao clicar em Next, será exibida uma tela questionando se deseja que sejam criados os métodos de preencher um DataTable (método Fill) e o de retornar um DataTable (método GetData). Há possibilidade de alterar o nome do método que será criado. Supondo que será criado uma rotina SQL que retorne um registro de uma tabela cujo código seja igual a um valor passado por parâmetro, pode-se chamar os métodos de FillByCodigo e GetDataByCodigo.

Clicando novamente em Next aparecerá a mensagem que os métodos FillByCodigo e GetDataByCodigo foram criados. Após clicar em Finish o TableAdapter da Tabela “Cidades” ficará assim:

Nova Query que seleciona uma cidade pelo código

Page 12: Binding Source

Da mesma forma é possível criar, ou associar Stored Procedures a um TableAdapter. Para associar uma Stored Procedure, deve-se escolher a terceira opção da tela de escolha de tipo de comando:

Ao clicar em Next, será aberta a tela de seleção de Stored Procedure:

Clicando em Next, aparecerá a tela onde informaremos o tipo de retorno da Stored Procedure.

As procedures existentes no Banco de Dados aparecerão aqui. Selecione a Procedure que desejar.

Aqui aparecerão os parâmetros de entrada.

Aqui aparecerão os campos de resultado.

Page 13: Binding Source

Existem 3 tipos de retorno: o Tabular, que retorna dados em formato de tabela, um retorno de um único valor ou uma procedure sem retorno.

Clicando novamente em Next, será possível informar o nome do método que iremos adicionar.

Por fim, clicando em Next, será exibida uma tela de informações sobre o método criado.

Page 14: Binding Source

2.4. Criando uma Stored Procedure a partir do VS2005

Podemos criar uma Stored Procedure diretamente pelo TableAdapter ou então através do Server

Explorer. Para isso basta clicar na conexão desejada, depois clicar com o botão direito na opção Stored

Procedures e depois disso clicar em Add New Stored Procedure no menu que será exibido.

Será aberta então uma janela para que possamos escrever nossa Stored Procedure. Ao clicar em salvar, essa Stored Procedure será compilada. Se houver algum problema de sintaxe, será emitida uma mensagem de aviso do erro. Caso contrário a Stored Procedure será criada.

Dica: Evite iniciar o nome de um Stored Procedure com o prefixo “sp_”, pois este é o prefixo usado nas Stored Procedures do sistema.

Page 15: Binding Source

3. Desenvolvendo aplicações de acesso a dados utilizando TableAdapter e BindingSource

Verificar projeto NF_Completo, cadastro de Produtos. http://docentes.anchieta.br/~ednilsonc/Ambiente%20de%20Programa%e7%e3o%20II/Projetos/ O BindingSource é um componente que tem como principal objetivo conectar componentes como um DataGridView, TextBox ou ComboBox por exemplo, a um DataTable ou campo de um DataTable. Uma vez conectado este componente vai exibir o conteúdo que estiver presente no DataTable. O BindingSource também gerencia alterações efetuadas num DataTable e, trabalhando em conjunto com um TableAdapter permite adicionar, alterar e excluir registros de um banco de dados. Para se conectar um BindingSource a um componente, podemos utilizar as propriedades DataBindings do mesmo. Existem duas formas de adicionarmos um BindingSource a um formulário: Uma delas é de forma manual, adicionando ao projeto o Componente BindingSource através da janela ToolBox:

Da segunda forma o BindingSource é criado automaticamente, após criarmos um link entre um componente e um DataSet através da propriedade DataBindings.

Page 16: Binding Source

A figura acima mostra um formulário com um TextBox selecionado - txtCodigo e a “Janela de Propriedades” com a propriedade DataBindings – item Text do componente TextBox sendo editada. Da primeira vez que vamos conectar um componente de um formulário a um campo de um DataTable, se ainda não existir um BindingSource para a tabela desejada, devemos expandir os níveis como mostra a figura acima, até chegarmos na tabela correta e daí clicamos no campo em que será efetuado o link com nosso componente. Será incluído então ao formulário, os componentes TableAdapter, BindingSource e DataSet. Como selecionamos um campo do DataTable “Produtos” do DataSet “dsCliente”, o VisualStudio cria o componente com a nomenclatura exibida na figura abaixo:

Seguindo o exemplo acima, uma vez criado o objeto ProdutosBindingSource no formulário, para conectar os demais componentes do formulário ao DataTable “Produtos”, não devemos mais conectar utilizando a opção Other Data Sources e sim diretamente através do objeto ProdutosBindingSource, caso contrário um novo BindingSource será criado e teremos problemas na hora de atualizar o banco com o TableAdapter. A figura a seguir mostra como efetuar um link entre um TextBox e um campo de um DataTable utilizando um BindingSource:

Page 17: Binding Source

3.1. Principais comandos de um BindingSource

• Antes de iniciar uma inclusão:

Me.ProdutosBindingSource.AddNew()

• Para gravar:

'Finaliza a edição do DataTable Me.ProdutosBindingSource.EndEdit()

'Atualiza o Banco de dados com os dados do DataTalbe Produtos do

'DataSet DsCliente

Me.ProdutosTableAdapter.Update(DsCliente.Produtos)

• Para excluir:

'Remove a linha correte da tabela produtos do DataSet

Me.ProdutosBindingSource.RemoveCurrent()

'Aplica as alterações feitas no DataTable Produtos do DataSet

'DsCadastro ao Banco de Dados

Me.ProdutosTableAdapter.Update(DsCadastro.Produtos)

• Para cancelar um evento do BindingSource:

'Cancela a alteração ou adição feita no DataTable Me.ProdutosBindingSource.CancelEdit()

Page 18: Binding Source

4. Desenvolvendo aplicações de acesso a dados utilizando TableAdapter

Para poder visualizar, editar e criar rotinas de comandos SQL ou Stored Procedure, inicialmente devemos abrir o DataSet desejado, através de um duplo clique sobre o DataSet presente na janela Solution Explorer.

4.1. Utilizando SQL Verificar projeto Treino, FrmCidades: http://docentes.anchieta.br/~ednilsonc/Ambiente%20de%20Programa%e7%e3o%20II/Projetos/ Podemos criar nossas próprias rotinas de SQL para Inclusão, Alteração e Exclusão ou então utilizar as rotinas já presentes em nosso TableAdapter.

Através das propriedades de um TableAdapter, podemos verificar os SQLs padrões de INSERT, DELETE e UPDATE e alterá-los conforme nossa necessidade. Para isso é necessário expandir o Command desejado (exemplo UpdateCommand), clicar sobre a propriedade CommandText e posteriormente sobre o botão “...”. Será aberta uma tela de edição de SQL como foi mostrado no item 2.3.

Podemos criar nossos próprios métodos de INSERT, DELETE e UPDATE, como foi abordado no item 2.3 deste tutorial.

Page 19: Binding Source

Exemplo de utilização do método INSERT de um TableAdapter :

Sub Incluir()

Dim taCidade As Treino.dsTreinoTableAdapters.CidadesTableAdapter

Try

taCidade = New Treino.dsTreinoTableAdapters.CidadesTableAdapter

taCidade.Insert(CInt(txtCodigo.Text), _

txtCidade.Text.Trim.ToUpper, _

cboEstado.SelectedItem.ToString)

MessageBox.Show("Cidade incluída com sucesso", "Inclusão", _

MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception

MessageBox.Show("Erro ao Incluir!", "ERRO", _

MessageBoxButtons.OK, MessageBoxIcon.Error)

Finally

taCidade = Nothing

End Try

End Sub

Exemplo da utilização do método UpdateCidades criado pelo usuário em um TableAdapter (ver figura anterior): Sub Alterar()

Dim taCidade As Treino.dsTreinoTableAdapters.CidadesTableAdapter

Try

'Instancia o objeto CidadesTableAdapter

taCidade = New Treino.dsTreinoTableAdapters.CidadesTableAdapter

'Chama o método UpdateCidades, criado no TableAdapter Cidades

taCidade.UpdateCidades(txtCidade.Text.Trim.ToUpper, _

cboEstado.SelectedItem.ToString, _

CInt(txtCodigo.Text))

MessageBox.Show("Cidade alterada com sucesso", "Alteração", _

MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception

MessageBox.Show("Erro ao Gravar!", "ERRO", _

MessageBoxButtons.OK, MessageBoxIcon.Error)

Finally

taCidade = Nothing

End Try

End Sub

Estrutura: <Nome do Projeto>.<Coleção de TableAdapters do DataSet ‘dstreino’>.<TableAdapter desejado>

Page 20: Binding Source

4.2. Utilizando Stored Procedures

Verificar projeto Treino FrmProc: http://docentes.anchieta.br/~ednilsonc/Ambiente%20de%20Programa%e7%e3o%20II/Projetos/ Um TableAdapter permite criar ou associar Stored Procedures de Seleção, Inclusão, Alteração e Exclusão. Para alterar os comandos padrões de um TableAdapter para que estes executem Stored Procedures, basta alterar a propriedade CommandType para “StoredProcedure” e na propriedade CommandText informar o nome da procedure.

É possível também associar Stored Procedures em um TableAdapter como foi mostrado no item 2.3 deste tutorial. Os exemplos de utilização de métodos de um TableAdapter exibido no tópico anterior, também valem aqui.

Informar o nome da Stored Procedure

Alterar o tipo para StoredProcedure

Page 21: Binding Source

4.3. Desenvolvendo procedimentos de acesso a dados

Verificar projeto Treino FrmObjetos: http://docentes.anchieta.br/~ednilsonc/Ambiente%20de%20Programa%e7%e3o%20II/Projetos/

4.3.1. Executando comandos SQL que não possuem retorno

Exemplo de código comentado: Function ExecutaSQL(ByVal strSql As String) As Integer

Dim conn As SqlConnection 'Objeto responsável pela conexão

Dim cmd As SqlCommand 'Responsável por armazenar o SQL executado

Dim ret As Integer 'Variável de retorno

Try

'Cria a Conexão

conn = New SqlConnection(My.Settings.TreinoConnectionString)

'Inicializa o command

cmd = New SqlCommand(strSql, conn)

conn.Open() 'Abre a conexão com o banco de dados

ret = cmd.ExecuteNonQuery() 'Executa o sql

conn.Close() 'Fecha a conexão

Catch ex As Exception

Throw ex

Finally

cmd = Nothing

conn = Nothing

End Try

End Function

Page 22: Binding Source

4.3.2. Executando comandos SQL que possuem retorno

Exemplo de código comentado: Function Pesquisar(ByVal strSQL As String) As DataTable

Dim conn As SqlConnection 'Objeto responsável pela conexão

Dim cmd As SqlCommand 'Armazenar o comando SQL que será executado

Dim da As SqlDataAdapter 'Retorna dados do Bando de Dados

'Objeto tabela criada com o nome de 'Cidade'

Dim dt As DataTable = New DataTable("Cidade")

Try

'Cria a Conexão

conn = New SqlConnection(My.Settings.TreinoConnectionString)

'Inicializa o command

cmd = New SqlCommand(strSQL, conn)

'Abre a conexão com o banco de dados

conn.Open()

'Inicializa o data adapter que executará o SQL

da = New SqlDataAdapter(cmd)

'Preenche o Data Table dt com o resultado do SQL

da.Fill(dt)

'Fecha a conexão

conn.Close()

Return dt

Catch ex As Exception

MessageBox.Show(ex.Message, "Erro ao pesquisar", _

MessageBoxButtons.OK, MessageBoxIcon.Error)

Return Nothing

Finally

dt = Nothing

cmd = Nothing

da = Nothing

conn = Nothing

End Try

End Function

Page 23: Binding Source

4.3.3. Executando Stored Procedures

Exemplo de código que faz a chamada de uma Stored Procedure de exclusão: Function Excluir(ByVal Codigo As Integer) As Integer

Dim conn As SqlConnection 'Objeto responsável pela conexão

Dim cmd As SqlCommand 'Armazenar a procedure que será executada

Dim param As SqlParameter 'Parâmetros da procedure

Try

'Cria a Conexão

conn = New SqlConnection(My.Settings.TreinoConnectionString)

'Inicializa o command

cmd = New SqlCommand("usp_de_Cidades", conn)

cmd.CommandType = CommandType.StoredProcedure

'Adiciona parâmetro Código da stored procedure

param = New SqlParameter("@Codigo", SqlDbType.Int)

param.Value = Codigo

cmd.Parameters.Add(param)

conn.Open() 'Abre a conexão com o banco de dados

cmd.ExecuteNonQuery() 'Executa o sql

conn.Close() 'Fecha a conexão

Catch ex As Exception

Throw ex

Finally

cmd = Nothing

conn = Nothing

End Try

End Function