* DATAPROVIDERS * Controlos de apresentação dos dados Acesso a uma base de dados através de um data set Controlos ligados Binding controls Base de dados Controlos de apresentação dos dados Controlos não ligados Acesso a uma base de dados através de um data provider Ligação controlada por programação e objetos específicos desse tipo de ligação *Listar uma tabela da Imports System.Data.SqlClient Base de Dados Public Class Form1 Private Sub ArtigosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)… Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() Dim sql As String = "Select * From Artigos" Dim sqlcom As New SqlCommand(sql, con) Dim dr As SqlDataReader = sqlcom.ExecuteReader() . . . con.Close() End Sub End Class Primeira Fase Segunda Fase *DATAPROVIDERS Imports System.Data.SqlClient Esta declaração importa o namespace Data.SqlClient, de System, que contém as classes de objetos necessárias para a programação que vamos escrever. Namespace Tipo System.Data.SqlClient Bases de dados alojadas num servidor SQL. System.Data.OleDB Origens de dados expostas através do protocolo OLE. (Ex: Access, Excel e páginas Web e ASCII) System.Data.Odbc Origens de dados expostas através do protocolo ODBC. System.Data.OracleClient Bases de dados Oracle. System.Data.SqlServerCe Bases de dados Microsoft SQL Server Compact 3.5 *CONNECTION STRING Microsof SQL Server Database File "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Atributo Significado Data Source A instância do SQL Server que fornece os dados. AttachDbFilename A indicação do local do ficheiro da base de dados. Integrated Security O modo de segurança da B.D; com a opção TRUE, essa segurança fica integrada com o Windows. Connect Timeout Espaço de tempo limite em segundos para o estabelecimento da ligação ao servidor. User Instance Define se deverá, ou não, ser criada uma instância virtual para cada utilizador que acede ao servidor. Access "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\professor.ESMAIA\Desktop\base de testes.accdb" Microsoft SQL Server Compact 3.5 “Data Source=C:\Users\professor.ESMAIA\Desktop\Empresa.sdf” *SqlConnection Dim con As New SqlConnection(cs) Cria um objeto com o nome con sendo do tipo SqlConnection (ligação ao servidor SQL), fazendo passar cs – a connection string. Namespace Classe para ligação à B.D System.Data.SqlClient SqlConnection System.Data.OleDB OleDbConnection System.Data.SqlServerCe SqlCeConnection *Primeira fase A instrução con.Open( ) abre a ligação e a instrução con.close( ) fecha-a. A primeira fase deste processo consiste em estabelecer a ligação com o servidor e a base de dados. Começa com a criação da connection string e termina com abertura da ligação: con.open ( ). Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() *Segunda fase A segunda fase das operações vai consistir em enviar um comando SQL para ser executado na base de dados. Dim sql As String = "Select * From Artigos" Isto cria a variável sql como uma string que codifica um comando SQL. A interrogação de qualquer Base de Dados Relacional faz-se sempre utilizando o comando SELECT. Sintaxe: SELECT campo1, campo2,… ,campo n FROM tabela1, … , tabela k [WHERE Condição ] [GROUP BY … ] [HAVING … ] [ORDER BY … ] Se quisermos saber toda a informação que existe na tabela (todas as colunas), indicamos cada uma das colunas separadas por vírgula. O nome de todos os campos pode ser substituído pelo carácter asterisco *. SELECT Artigo, Categoria, Preço, Quantidade FROM Artigos SELECT * FROM Artigos *Instanciar objeto da classe xxxCommand Cria o objeto sqlcom, a partir da classe SqlCommand, fazendo passar dois parâmetros: sql – o comando SQL con – o objeto que contém a informação sobre a ligação estabelecida com a base de dados. Namespace Classe para fazer executar um comando SQL. System.Data.SqlClient SqlCommand System.Data.OleDB OleDbCommand System.Data.SqlServerCe SqlCeCommand *DATAREADER Quando o objetivo é efetuar consultas diretas sobre o sistema de base de dados, opta-se pela instanciação de uma classe SqlDataReader, que permite ler um conjunto de registos obtido através de um comando SQL. Dim dr As SqlDataReader = sqlcom.ExecuteReader() O objeto dr recebe os dados obtidos, com a execução do comando SQL, através do método ExecuteReader() do objeto sqlcom. ExecuteReader() - Serve para executar seleções de dados, retornando os registos da seleção efetuada. Namespace Classe DataReader System.Data.SqlClient SqlDataReader System.Data.OleDB OleDbDataReader System.Data.SqlServerCe SqlCeDataReader * DataGridView1.Columns.Clear() Dim n As Integer = dr.FieldCount Dim campo As String Dim k As Integer For k = 0 To n - 1 campo = dr.GetName(k) DataGridView1.Columns.Add(campo, campo) Next A Terceira Fase consiste em fazer com que os dados obtidos na leitura sejam escritos de forma adequada na interface(datgridview). Dim i As Integer = 0 While dr.Read() Dim linha As New DataGridViewRow DataGridView1.Rows.Add(linha) For k = 0 To n - 1 DataGridView1.Rows(i).Cells(k).Value = dr.Item(k) Next i += 1 End While DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells con.Close() *Terceira fase DataGridView1.Columns.Clear() Limpa (clear) os campos da grelha se ela contiver dados. Dim n As Integer = dr.FieldCount A variável n é declarada como inteira e simultaneamente inicializada com o número de campos que a tabela possui, valor esse retornado pela propriedade FieldCount (contar campos)do objeto dr. Dim campo As String Dim k As Integer For k = 0 To n - 1 campo = dr.GetName(k) Ciclo para preencher o cabeçalho da grelha com o nome dos campos da tabela. O nome dos campos é obtido pela função GetName, que tem como argumento a variável K que representa a posição que cada campo ocupa na tabela . DataGridView1.Columns.Add(campo, campo) Adiciona colunas à grelha. Next Name da coluna Header Text da coluna * Dim i As Integer = 0 While dr.Read() Ciclo que se repete enquanto houver dados, adicionando linhas à grelha e colocando valores nessas linhas correspondentes aos valores dos registos da tabela. Dim linha As New DataGridViewRow DataGridView1.Rows.Add(linha) Cria objeto linha para adicionar posteriormente uma nova linha à grelha. For k = 0 To n - 1 DataGridView1.Rows(i).Cells(k).Value = dr.Item(k) Next i += 1 Linha Campo Ciclo para preencher nas K colunas os valores dos K campos. Propriedade End While DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells Ajusta as colunas da grelha aos dados a apresentar. * Private Sub ClientesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)… Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() Dim artigo As String artigo = InputBox("Qual o artigo a eliminar?: ") Para saber qual o registo que vamos apagar, pedimos ao utilizador que nos dê o nome do artigo a apagar. Dim sql As String = "Delete Artigos where artigo Like '" & artigo & "'" Dim sqlcom As New SqlCommand(sql, con) Dim nr As Integer nr = sqlcom.ExecuteNonQuery() If nr > 0 Then MsgBox("Nº de registos apagados: " & nr) Else MsgBox("Artigo não encontrado") End If con.Close() End Sub Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() SqlConnection OleDbConnection SqlCeConnection 1 2 1ª Fase – Estabelecer a Ligação à Base de dados Instanciar uma classe xxxConnection, fazendo passar a connection string previamente atribuída a uma constante, para após abrir a ligação. *Estabelecer a ligação à base de dados Interrupção da string para passar a variável artigo Inicio da string Retoma a string Fim da string Dim sql As String = “ Delete Artigos where artigo Like ‘ " & artigo & “ ‘ " Dim sqlcom As New SqlCommand(sql, con) Delete Pessoa Where Id = 999 Variável que representa Alicate Delete Artigos Where Artigo Like ‘ Alicate ‘ O comando DELETE permite apagar conjuntos de linhas (registos ) existentes numa única tabela. Sintaxe: DELETE FROM tabela [WHERE Condição ] (A cláusula where restringe o conjunto de registos que irão ser apagados) Cria o objeto sqlcom, a partir da classe SqlCommand, fazendo passar dois parâmetros: sql (o comando SQL) e con ( o objeto que contém a informação sobre a ligação estabelecida com a base de dados). SqlCommand OleDbCommand SqlCeCommand *Código para apagar um registo numa tabela Como o próprio nome indica serve para executar não query’s (selecções de dados) mas sim para executar comandos Transact-SQL como o INSERT, UPDATE e DELETE. Retorna um valor inteiro com o número de registos afectados pela operação. Dim nr As Integer nr = sqlcom.ExecuteNonQuery() If nr > 0 Then MsgBox("Nº de registos apagados: " & nr) Else MsgBox("Artigo não encontrado") End If con.Close() Como podem verificar nos exemplos de código, o que muda essencialmente é o comando Transact-SQL. A estrutura é sempre igual para inserir, atualizar e apagar dados, podendo haver mais ou menos parâmetros. Os comandos T-SQL têm sempre esta estrutura: “INSERT INTO Tabela (campo1, campo2) VALUES (valor1, valor2)” “UPDATE Tabela SET campo1 = valor1, campo2 = valor2” “DELETE FROM Tabela WHERE campos1 = valor1” * * Private Sub InserirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles … Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() Dim nome, categoria As String Dim quant, preço As Integer nome = InputBox("Nome do Artigo: ") categoria = InputBox("Categoria do Artigo: ") preço = InputBox("Preço do Artigo: ") quant = InputBox("Quantidade do Artigo: ") Declaração das variáveis para de seguida, através de InputBox, efetuar a leitura dos dados para os poder inserir na base de dados. Dim sql As String = "Insert into Artigos (Artigo, Categoria, Preço, Quantidade) Values ('" & nome & "','" & categoria & "','" & preço & "','" & quant & "')" Dim sqlcom As New SqlCommand(sql, con) Dim nr As Integer Try nr = sqlcom.ExecuteNonQuery() Catch ex As Exception MsgBox("Erro: " & ex.Message) End Try MsgBox("Nº de registos Inseridos: " & nr) con.Close() End Sub Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() SqlConnection OleDbConnection SqlCeConnection 1 2 1ª Fase – Estabelecer a Ligação à Base de dados Instanciar uma classe xxxConnection, fazendo passar a connection string previamente atribuída a uma constante, para após abrir a ligação. *Estabelecer a ligação à base de dados Inicio da string Retoma a string Dim sql As String = “ Insert into Artigos (Artigo, Categoria, Preço, Quantidade) Values (‘ " & nome & “ ',‘ " & categoria & “ ',‘ " & preço & “ ',‘ " & quant & “ ‘) " Dim sqlcom As New SqlCommand(sql, con) Interrupção da string para passar a variável _______ Fim da string Insert into Artigos (Artigo, Categoria, Preço, Quantidade) Values ( ‘ Martelo ‘, ‘Ferramentas’, ’12’, ‘4’) O comando INSERT permite realizar a introdução de novos registos numa tabela da Base de Dados. Sintaxe: INSERT INTO tabela (Campo1, … ,Campo k) VALUES(valor1, …,valor k) Cria o objeto sqlcom, a partir da classe SqlCommand, fazendo passar dois parâmetros: sql (o comando SQL) e con ( o objeto que contém a informação sobre a ligação estabelecida com a base de dados). SqlCommand OleDbCommand SqlCeCommand *Código para inserir um registo numa tabela Como o próprio nome indica serve para executar não query’s (selecções de dados) mas sim para executar comandos Transact-SQL como o INSERT, UPDATE e DELETE. Retorna um valor inteiro com o número de registos afectados pela operação. Dim nr As Integer Try nr = sqlcom.ExecuteNonQuery() Catch ex As Exception MsgBox("Erro: " & ex.Message) End Try MsgBox("Nº de registos Inseridos: " & nr) con.Close() Como podem verificar nos exemplos de código, o que muda essencialmente é o comando Transact-SQL. A estrutura é sempre igual para inserir, atualizar e apagar dados, podendo haver mais ou menos parâmetros. Os comandos T-SQL têm sempre esta estrutura: “INSERT INTO Tabela (campo1, campo2) VALUES (valor1, valor2)” “UPDATE Tabela SET campo1 = valor1, campo2 = valor2” “DELETE FROM Tabela WHERE campos1 = valor1” * * Private Sub ProcurarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) … Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() Dim categoria As String categoria = InputBox("Digite a categoria a procurar: ") Declaração da variável que irá receber a categoria a pesquisar. Dim sql As String = "Select * from artigos where categoria like'" & categoria & "'" Dim sqlcom As New SqlCommand(sql, con) Dim dr As SqlDataReader = sqlcom.ExecuteReader() Dim i As Integer = 0 DataGridView1.Columns.Clear() Dim n As Integer = dr.FieldCount Dim campo As String Dim k As Integer For k = 0 To n - 1 campo = dr.GetName(k) DataGridView1.Columns.Add(campo, campo) Next While dr.Read() Dim linha As New DataGridViewRow() DataGridView1.Rows.Add(linha) For k = 0 To n - 1 DataGridView1.Rows(i).Cells(k).Value = dr.Item(k) Next i += 1 End While DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells con.Close() End Sub Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() SqlConnection OleDbConnection SqlCeConnection 1 2 1ª Fase – Estabelecer a Ligação à Base de dados Instanciar uma classe xxxConnection, fazendo passar a connection string previamente atribuída a uma constante, para após abrir a ligação. *Estabelecer a ligação à base de dados *Código para procurar Inicio da string registos numa tabela Retoma a string Fim da string Interrupção da string para passar a variável categoria Dim sql As String = “ Select * from artigos where categoria like ‘ " & categoria & “ ‘ " Dim sqlcom As New SqlCommand(sql, con) Select * From Artigos Where Categoria like ‘ Escritório ‘ Dim dr As SqlDataReader = sqlcom.ExecuteReader() Quando o objetivo é efetuar consultas diretas sobre o sistema de base de dados, opta-se pela instanciação de uma classe SqlDataReader, que permite ler um conjunto de registos obtido através de um comando SQL. O objeto dr recebe os dados obtidos, com a execução do comando SQL, através do método ExecuteReader() do objeto sqlcom. ExecuteReader() - Serve para executar seleções de dados, retornando os registos da seleção efetuada. Namespace Classe Command Classe DataReader System.Data.SqlClient SqlCommand SqlDataReader System.Data.OleDB OleDbCommand OleDbDataReader Podemos restringir o conjunto de registos a apresentar utilizando a cláusula WHERE. Sintaxe: System.Data.SqlServerCe SqlCeCommand SqlCeDataReader SELECT campo1, campo2,… ,campo n FROM tabela1, … , tabela k WHERE Condição *Código para procurar registos numa tabela DataGridView1.Columns.Clear() Limpa (clear) os campos da grelha se ela contiver dados. Dim n As Integer = dr.FieldCount A variável n é declarada como inteira e simultaneamente inicializada com o número de campos que a tabela possui, valor esse retornado pela propriedade FieldCount (contar campos)do objeto dr. Dim campo As String Dim k As Integer For k = 0 To n - 1 campo = dr.GetName(k) Ciclo para preencher o cabeçalho da grelha com o nome dos campos da tabela. O nome dos campos é obtido pela função GetName, que tem como argumento a variável K que representa a posição que cada campo ocupa na tabela . DataGridView1.Columns.Add(campo, campo) Adiciona colunas à grelha. Next Name da coluna Header Text da coluna * Dim i As Integer = 0 While dr.Read() Ciclo que se repete enquanto houver dados, adicionando linhas à grelha e colocando valores nessas linhas correspondentes aos valores dos registos da tabela. Dim linha As New DataGridViewRow DataGridView1.Rows.Add(linha) Cria objeto linha para adicionar posteriormente uma nova linha à grelha. For k = 0 To n - 1 DataGridView1.Rows(i).Cells(k).Value = dr.Item(k) Next i += 1 Linha Campo Ciclo para preencher nas K colunas os valores dos K campos. Propriedade End While DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells Ajusta as colunas da grelha aos dados a apresentar. * Private Sub ProcurarAlterarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True“ Dim con As New SqlConnection(cs) con.Open() Dim artigo As String artigo = InputBox("Digite o Artigo a procurar: ") Declaração da variável que irá receber o artigo a pesquisar. Leitura da variável através de uma InputBox. Dim sql As String = "Select * from artigos where artigo like'" & artigo & "'" Dim sqlcom As New SqlCommand(sql, con) Dim dr As SqlDataReader = sqlcom.ExecuteReader() DataGridView1.Columns.Clear() Dim n As Integer = dr.FieldCount Dim campo As String Dim k As Integer For k = 0 To n - 1 campo = dr.GetName(k) DataGridView1.Columns.Add(campo, campo) Next Dim i As Integer = 0 Dim linha As New DataGridViewRow() DataGridView1.Rows.Add(linha) While dr.Read() For k = 0 To n - 1 DataGridView1.Rows(i).Cells(k).Value = dr.Item(k) Next i += 1 End While DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells con.Close() Button1.Visible = True End Sub Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() SqlConnection OleDbConnection SqlCeConnection 1 2 1ª Fase – Estabelecer a Ligação à Base de dados Instanciar uma classe xxxConnection, fazendo passar a connection string previamente atribuída a uma constante, para após abrir a ligação. *Estabelecer a ligação à base de dados *Código para procurar e alterar Inicio da string registos numa tabela Interrupção da string para passar a variável artigo Fim da string Retoma a string Dim sql As String = “ Select * from artigos where artigo like ‘ " & artigo & “ ‘ " Dim sqlcom As New SqlCommand(sql, con) Select * From Artigos Where Artigo like ‘ Papel A4 ‘ Dim dr As SqlDataReader = sqlcom.ExecuteReader() Quando o objetivo é efetuar consultas diretas sobre o sistema de base de dados, opta-se pela instanciação de uma classe SqlDataReader, que permite ler um conjunto de registos obtido através de um comando SQL. O objeto dr recebe os dados obtidos, com a execução do comando SQL, através do método ExecuteReader() do objeto sqlcom. ExecuteReader() - Serve para executar seleções de dados, retornando os registos da seleção efetuada. Namespace Classe Command Classe DataReader System.Data.SqlClient SqlCommand SqlDataReader System.Data.OleDB OleDbCommand OleDbDataReader Podemos restringir o conjunto de registos a apresentar utilizando a cláusula WHERE. Sintaxe: System.Data.SqlServerCe SqlCeCommand SqlCeDataReader SELECT campo1, campo2,… ,campo n FROM tabela1, … , tabela k WHERE Condição *Código para procurar e alterar registos numa tabela DataGridView1.Columns.Clear() Limpa (clear) os campos da grelha se ela contiver dados. Dim n As Integer = dr.FieldCount A variável n é declarada como inteira e simultaneamente inicializada com o número de campos que a tabela possui, valor esse retornado pela propriedade FieldCount (contar campos)do objeto dr. Dim campo As String Dim k As Integer For k = 0 To n - 1 campo = dr.GetName(k) Ciclo para preencher o cabeçalho da grelha com o nome dos campos da tabela. O nome dos campos é obtido pela função GetName, que tem como argumento a variável K que representa a posição que cada campo ocupa na tabela . DataGridView1.Columns.Add(campo, campo) Adiciona colunas à grelha. Next Name da coluna Header Text da coluna * Dim i As Integer = 0 While dr.Read() Ciclo que se repete enquanto houver dados, adicionando linhas à grelha e colocando valores nessas linhas correspondentes aos valores dos registos da tabela. Dim linha As New DataGridViewRow DataGridView1.Rows.Add(linha) Cria objeto linha para adicionar posteriormente uma nova linha à grelha. For k = 0 To n - 1 DataGridView1.Rows(i).Cells(k).Value = dr.Item(k) Next i += 1 Linha Campo Ciclo para preencher nas K colunas os valores dos K campos. Propriedade End While DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells Ajusta as colunas da grelha aos dados a apresentar. * Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) … Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() Dim artigo, categoria As String Dim preço, quantidade As Integer artigo = DataGridView1.Rows(0).Cells(0).Value categoria = DataGridView1.Rows(0).Cells(1).Value preço = DataGridView1.Rows(0).Cells(2).Value quantidade = DataGridView1.Rows(0).Cells(3).Value Declaração de variáveis. Estas vão receber os valores que se encontram nas diversas colunas da DataGridView e que são os valores do registo a alterar. A propriedade Value de uma célula de uma determinada linha atribui valores às variáveis declaradas. Dim sql As String = "Update Artigos set categoria='" & categoria & "',preço='" & preço & "',quantidade='" & quantidade & "'" & "where artigo like '" & artigo & "'" Dim sqlcom As New SqlCommand(sql, con) Dim nr As Integer Try nr = sqlcom.ExecuteNonQuery Catch ex As Exception MsgBox("Erro: " & ex.Message) End Try MsgBox("Nº de registos alterados: " & nr) con.Close() Button1.Visible = False End Sub Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() SqlConnection OleDbConnection SqlCeConnection 1 2 1ª Fase – Estabelecer a Ligação à Base de dados Instanciar uma classe xxxConnection, fazendo passar a connection string previamente atribuída a uma constante, para após abrir a ligação. *Estabelecer a ligação à base de dados Inicio da string Retoma a string Dim sql As String = “ Update Artigos set categoria= ‘ " & categoria & “ ',preço= ‘ " & preço & “ ',quantidade= ‘ " & quantidade & “ ‘ " & “ where artigo like ‘ " & artigo & “ ‘ " Dim sqlcom As New SqlCommand(sql, con) Fim da string Interrupção da string para passar a variável _______ Update Artigos Set Categoria =‘ Ferramentas’, Preço= ‘12.85’, Quantidade=’ 19 ’ Where artigo like ‘ Martelo ‘ O comando UPDATE permite alterar os valores já existentes nos campos de uma única tabela. Sintaxe: UPDATE tabela SET Nome_coluna1= {expressão1, query1}, Nome_coluna2= {expressão2, query2}, … [WHERE condição] SqlCommand Cria o objeto sqlcom, a partir da classe SqlCommand, fazendo passar dois parâmetros: sql (o comando SQL) e con ( o objeto que contém a informação sobre a ligação estabelecida com a base de dados). *Código para procurar e OleDbCommand SqlCeCommand alterar registos numa tabela Como o próprio nome indica serve para executar não query’s (selecções de dados) mas sim para executar comandos Transact-SQL como o INSERT, UPDATE e DELETE. Retorna um valor inteiro com o número de registos afectados pela operação. Dim nr As Integer Try nr = sqlcom.ExecuteNonQuery() Catch ex As Exception MsgBox("Erro: " & ex.Message) End Try MsgBox("Nº de registos Inseridos: " & nr) con.Close() Como podem verificar nos exemplos de código, o que muda essencialmente é o comando Transact-SQL. A estrutura é sempre igual para inserir, atualizar e apagar dados, podendo haver mais ou menos parâmetros. Os comandos T-SQL têm sempre esta estrutura: “INSERT INTO Tabela (campo1, campo2) VALUES (valor1, valor2)” “UPDATE Tabela SET campo1 = valor1, campo2 = valor2” “DELETE FROM Tabela WHERE campos1 = valor1” * * Const cs As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Luís\Desktop\EmpresaMaia.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim con As New SqlConnection(cs) con.Open() Listar / Procurar (SELECT) Dim sql As String = “ Select * from Tabela Dim sqlcom As New SqlCommand(sql , con) Dim dr As SqlDataReader = sqlcom.ExecuteReader() + ( Código para criar cabeçalho da DataGridView) dr.FieldCount e dr.GetName( i ) + (Código para preencher a DataGridView) While dr.Read( ) e dr.Item ( i ) +( Código para ler variável que vai suportar a condição (Where)) Dim sql As String = “ Select * from Tabela where campo like ‘ " & artigo & “ ‘ " Dim sqlcom As New SqlCommand(sql , con) Dim dr As SqlDataReader = sqlcom.ExecuteReader() + ( Código para criar cabeçalho da DataGridView) dr.FieldCount e dr.GetName( i ) + (Código para preencher a DataGridView) While dr.Read( ) e dr.Item ( i ) Inserir / Eliminar / Alterar (Insert , Delete, Update) +( Código para ler as variáveis que vai suportar os valores a inserir na tabela.) Dim sql As String = “ Insert into Tabela (Campo1, … , Campo n) Values ( ‘ " & valor1 & “ ',‘ " & valor n & “ ‘ ) " Dim sqlcom As New SqlCommand(sql, con) … sqlcom.ExecuteNonQuery() +( Código para ler variável que vai suportar a condição (Where)) Dim sql As String = “ Delete Artigos where artigo Like ‘ " & artigo & “ ‘ " Dim sqlcom As New SqlCommand(sql, con) … sqlcom.ExecuteNonQuery() +( Código para ler as variáveis que representam o registo a alterar.) Dim sql As String = “ Update Artigos set campo1=‘ " & valor1 & “ ',campo2=‘ " & valor2 “ where campo like ‘ " & artigo & “ ‘ " Dim sqlcom As New SqlCommand(sql, con) … sqlcom.ExecuteNonQuery() DataGridView1.Columns.Add(campo, campo) Adiciona colunas à grelha. Dim linha As New DataGridViewRow Cria objeto linha DataGridView1.Rows.Add(linha) para adicionar uma nova linha à grelha. DataGridView1.Rows(i).Cells(k).Value = dr.Item(k) DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells Ajusta as colunas da grelha aos dados a apresentar. * * * * * * * * * * * * * * * * * Figura que ilustra os elementos chave que constituem um chart (ou gráfico) Imports System.Windows.Forms.DataVisualization.Charting 'define os valores do eixo y - milhoes de pessoas Dim yPopulacao() As Double = {191480, 46000, 39934,28221, 28121, 16803, 13481, 9694, 6238, 3350} 'define os valoes do eixo x - nome dos paises Dim xPaises() As String = {"Brasil", "Colombia", "Argentina","Peru", "Venezuela", "Chile","Equador", "Bolivia", "Paraguai", "Uruguai"} Private Sub btnGraficoTorta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGraficoTorta.Click With Chart1 'define o tipo de gráfico .Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Pie 'define o titulo do gráfico .Titles.Add("Os 10 países mais populosos da América do Sul") 'habilita a visão em 3D .ChartAreas(0).Area3DStyle.Enable3D = True 'define inclinação, rotação e perspectiva .ChartAreas(0).Area3DStyle.Inclination = 20 .ChartAreas(0).Area3DStyle.Rotation = 50 .ChartAreas(0).Area3DStyle.Perspective = 10 'define o estilo da linha .ChartAreas(0).Area3DStyle.LightStyle = LightStyle.Realistic 'define a paleta .Palette = ChartColorPalette.BrightPastel 'vincula os dados ao gráfico .Series(0).Points.DataBindXY(xPaises, yPopulacao) 'exibe os valores no eixo do gráfico .Series(0).IsValueShownAsLabel = True End With End Sub * * * * * * * * * * * * * * *