NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosASP.NET › Capítulo 12 : 03
Quer receber novidades e e-books gratuitos?
« Lição anterior Δ Página principal ¤ Capítulos Próxima lição »
ASP.NET - CURSO COMPLETO
Autor: Júlio Battisti

Lição 101 - Capítulo 12 - Sincronizando dados com o banco de dados

Para sincronizar as alterações feitas nos dados desconectados, com o banco de dados, utilizaremos algumas propriedades do objeto OleDbDataAdapter/SqlDataAdapter. Também utilizaremos o método Update, deste objeto.

O processo para enviar as alterações para o banco de dados é bastante simples:

1.         Definimos uma chave primária para o objeto DataTable.

2.         Criamos um objeto do tipo OleDbComandBuilder/SqlCommandBuilder. Na criação deste objeto passamos o nome do objeto DataAdapter como parâmetro.

3.         Defino as seguintes propriedades do objeto DataAdapter:

            InsertCommand: Um comando SQL que envia, para o banco de dados, as novas linhas do objeto DataTable.

            DeleteCommand: Um comando SQL que exclui do banco de dados, as linhas que foram excluídas no objeto DataTable.

            UpdateCommand: Um comando SQL que envia para o banco de dados, as alterações feitas nas linhas do objeto DataTable.

Estas propriedades podem ser definidas manualmente ou através da utilização de um objeto OleDbCommandBuilder/SqlCommandBuilder. O objeto CommandBuilder possui um método GetDeleteCommand para gerar, automaticamente, o comando para enviar as exclusões para o banco de dados; possui um método GetInsertCommand para gerar, automaticamente, o comando para inserir as novas linhas no banco de dados e um método GetUpdateCommand para gerar, automaticamente, o comando para enviar as alterações para o banco de dados.

4.         Uma vez definidos os comandos necessários, chamamos o método Update do objeto DataAdapter. Este método executa, no banco de dados, os comandos definidos nas propriedades InsertCommand, DeleteCommand e UpdateCommand. Caso tenhamos definido apenas uma destas propriedades, somente os respectivos comandos serão executados. Por exemplo, se construímos um formulário para cadastrar clientes, apenas precisaremos definir a propriedade InsertCommand.

Vamos lembrar do exemplo – Chap12ex1.aspx. Neste exemplo inserimos duas linhas no objeto DataTable e comprovamos que estas adições não foram enviadas para o banco de dados NorthWind.mdb. Se quisermos atualizar o banco de dados NorthWind.mdb, basta incluir as seguintes linhas de código, no final do procedimento Page_Load, do referido exemplo:

//  Em primeiro lugar, defino uma chave primária para o objeto DataTable.
Clientes2.PrimaryKey = new DataColumn[] {Clientes2.Columns["CódigoDoCliente"]};
//  Agora crio os comandos necessários para enviar
//  as alterações/inclusões/exclusões para o banco
//  de dados NorthWind.mdb. 
//  No nosso exemplo, apenas o comando para adição das linhas.
     // Em primeiro lugar crio um objeto do  tipo OleDbCommandBuilder
       OleDbCommandBuilder CriaComando = new OleDbCommandBuilder(MeuComando);
      // Agora defino a  propriedade InsertCommand do objeto MeuDataAdapter.
      MeuDataAdapter.InsertCommand=  CriaComando.GetInsertCommand();
      MeuDataAdapter.Update(ds,"Clientes2");

Ao inserir estes comandos, no final do procedimento Page_Load e recarregar a página, dois novos registros serão inseridos no banco de dados. Você pode abrir o Microsoft Access, carregar o banco de dados NorthWind.mdb e conferir. Os registros realmente foram inseridos.

Importante! A segunda vez que a página for carregada, será gerado um erro. Isso acontece porque, na segunda vez, estamos tentando cadastrar um cliente, com um CódigoDoCliente que já existe. Como o campo CódigoDoCliente é do tipo Chave Primária, não podem existir dois clientes com o mesmo código. Este erro é mostrado na Figura 12.

Curso Completo de ASP.NET - Júlio Battisti
Figura 12.7 Erro – CódigoDoCliente repetido.

Observe  o seguinte trecho da mensagem de erro:

Exception Details:  System.Data.ConstraintException: Column 'CódigoDoCliente'
is constrained to be unique. Value 'XXYYK' is already present.

Este trecho informa que já existe o cliente com CódigoDoCliente=”XXYYK”. Este cliente foi inserido na primeira vez que carregamos a página. Esta é mais uma prova de que o método Update realmente enviou as adições para o banco de dados.

Vamos apresentar um exemplo onde criamos um formulário para cadastro de clientes. O formulário apresenta diversos campos a serem preenchidos. O usuário preenche os campos e clica no botão Cadastrar. Os dados são enviados para o banco de dados NorthWind.mdb. Faremos uso dos Controles de Validação, vistos no Capítulo 8. Utilizaremos controles de validação para garantir que os seguintes campos sejam preenchidos, ou seja, são campos obrigatórios:

  • CódigoDoCliente
  • NomeDaEmpresa
  • Endereço
  • Telefone
  • País

Os demais campos não são de preenchimento obrigatório.

Na Listagem 12.4 temos o código para o exemplo proposto. Vou excluir o comentário da parte básica da listagem, parte esta que já explicamos em exemplos anteriores. Somente incluirei comentários nos pontos da listagem onde temos novidades.

Listagem 12.4 – Formulário para Cadastro de Clientes – Chap12ex4.aspx.

<%@ Import Namespace="System.Data"  %>
<%@ Import  Namespace="System.Data.OleDb" %>
<html>
<script language="C#"  runat="server">
  // Declaro variáveis que  serão globais para a página. 
  OleDbDataAdapter  MeuDataAdapter;
  String  auxSQL1;
  String  auxSQL2;
  String  comandoSQL;
  DataSet  ds = new DataSet();
   OleDbConnection MinhaConexão;
  String DefineConexão= "PROVIDER=MICROSOFT.JET.OLEDB.4.0;" +
  "DATA SOURCE=c:\\meus  documentos\\NorthWind.mdb";
 void InserirCliente(Object sender, EventArgs  e) 
       {
            //  Defino a string para o comando SQL;
            String  comandoSQL;
            comandoSQL  = "Select * From Clientes";
            MinhaConexão  = new OleDbConnection(DefineConexão);
            MeuDataAdapter = new  OleDbDataAdapter(comandoSQL, MinhaConexão);
MeuDataAdapter.Fill(ds,"Clientes");
            DataView  source = new DataView(ds.Tables[0]);
            DataTable Clientes = ds.Tables[0];
            // Vamos definir o campo  CódigoDoCliente como sendo a chave
            // primária da tabela Clientes.
            Clientes.PrimaryKey = new  DataColumn[] {Clientes.Columns["CódigoDoCliente"]};
            // Chamo o método NewRow da tabela  Clientes.
            DataRow Linha = Clientes.NewRow();
            // Defino os valores para a linha a  ser inserida.
                         Linha["CódigoDoCliente"]   = txtCódigoDoCliente.Text;
                         Linha["NomeDaEmpresa"]     = txtNomeDaEmpresa.Text;
                         Linha["NomeDoContato"]     = txtNomeDoContato.Text;
                         Linha["CargoDoContato"]    = txtCargoDoContato.Text;
                         Linha["Endereço"]          = txtEndereço.Text;
                         Linha["Cidade"]            = txtCidade.Text;
                         Linha["Região"]            = txtRegião.Text;
                         Linha["CEP"]               = txtCEP.Text;
                         Linha["País"]              = txtPaís.Text;
                         Linha["Telefone"]          = txtTelefone.Text;
                         Linha["Fax"]               = txtFax.Text;
            Clientes.Rows.Add(Linha);
            // Agora crio os comandos  necessários para enviar
            // as alterações/inclusões/exclusões para o banco
            // de dados NorthWind.mdb
            // Em primeiro lugar crio um objeto  do tipo OleDbCommandBuilder
          OleDbCommandBuilder CriaComando = new  OleDbCommandBuilder(MeuDataAdapter);
            // Agora defino a propriedade  InsertCommand do objeto MeuDataAdapter.
            MeuDataAdapter.InsertCommand=  CriaComando.GetInsertCommand();
            // Chamo o método Update do objeto DataAdapter.
            MeuDataAdapter.Update(ds,"Clientes");
             // Informo que o registro foi inserido com  sucesso.
 Label1.Text= "Registro para o cliente:  " + txtNomeDaEmpresa.Text + " Inserido com sucesso";
 Label2.Text="Preencha os campos abaixo  para cadastrar outro Cliente";
            //  Limpo o valor dos campos TextBox.
txtCódigoDoCliente.Text        ="";
            txtNomeDaEmpresa.Text    ="";
            txtNomeDoContato.Text    ="";
            txtCargoDoContato.Text   ="";
            txtEndereço.Text         ="";
            txtCidade.Text           ="";
            txtRegião.Text           ="";
            txtCEP.Text              ="";
            txtPaís.Text             ="";
            txtTelefone.Text         ="";
            txtFax.Text              ="";
       }
</script>
<body>
<asp:Label 
            id="Label1" 
            runat="server"
/>
<HR>
<asp:Label 
            id="Label2" 
            runat="server"
/>
<h3><font  face="Verdana">
            CADASTRO  DE CLIENTES 
<BR>
Empresa  North Traders Ltda.
</font>
</h3>
<HR>
            <form  runat=server>
            <asp:RequiredFieldValidator 
                        id="Requer_CódigoDoCliente" 
                        ControlToValidate="txtCódigoDoCliente"
                        Type="String" 
                        ErrorMessage="O Código do Cliente é campo Obrigatório <BR>"
                        Text="O  Código do Cliente é campo Obrigatório."
                         ForeColor="Red"
                        runat="server"
            />
            <asp:RequiredFieldValidator 
                        id="Requer_NomeDaEmpresa" 
                        ControlToValidate="txtNomeDaEmpresa"
                        Type="String" 
                        ErrorMessage="O Nome da Empresa é campo Obrigatório."
                        Text="O  Nome da Empresa é campo Obrigatório."
                         ForeColor="Red"
                        runat="server"
            />
            <asp:RequiredFieldValidator 
                        id="Requer_Endereço" 
                        ControlToValidate="txtEndereço"
                        Type="String" 
                        ErrorMessage="O Endereço é campo Obrigatório."
                        Text="O  Endereço é campo Obrigatório."
                         ForeColor="Red"
                        runat="server"
            />
            <asp:RequiredFieldValidator 
                        id="Requer_Telefone" 
                        ControlToValidate="txtTelefone"
                         Type="String" 
                         ErrorMessage="O Telefone é campo Obrigatório."
                        Text="O  Telefone é campo Obrigatório."
                         ForeColor="Red"
                         runat="server"
            />
            <asp:RequiredFieldValidator 
                        id="Requer_País" 
                        ControlToValidate="txtPaís"
                        Type="String" 
                        ErrorMessage="O País é campo Obrigatório."
                        Text="O  País é campo Obrigatório."
                         ForeColor="Red"
                        runat="server"
            />
<div align="left">
<table border="0">
              <tr>
                             <td>
                                    <p align="right">
                                    <B>Código do Cliente: (*)</B>
                              </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtCódigoDoCliente"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="5"
                                                Height="20"
                                                Width="300"
                                 />
                              </td> 
              </tr>  
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>Nome da Empresa: (*)</B>
                              </td>
                              <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtNomeDaEmpresa"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="40"
                                                Height="20"
                                                Width="250"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>Nome do  Contato:</B>
                              </td>
                             <td>
                              <asp:TextBox 
                                                runat=server
                                                id="txtNomeDoContato"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="30"
                                                Height="20"
                                                Width="250"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>Cargo do  Contato:</B>
                              </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtCargoDoContato"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="30"
                                                Height="20"
                                                Width="250"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>Endereço:(*)</B>
                              </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtEndereço"
                                                Text=""
                                                TextMode="SingleLine" 
                                                 Font_Face="Arial"
                                                Font_Size="3"
                                                MaxLength="60"
                                                Height="20"
                                                Width="200"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>Cidade:</B>
                              </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtCidade"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="15"
                                                Height="20"
                                                width="250"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>Região:</B>
                              </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtRegião"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="15"
                                                Height="20"
                                                Width="250"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>CEP:</B>
                             </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtCEP"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="10"
                                                Height="20"
                                                Width="250"
                                />
                             </td>
    </tr>            
               <tr>
                <td>
                                    <p  align="right">
                                    <B>FAX:</B>
                             </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtFax"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="24"
                                                Height="20"
                                                Width="250"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>Telefone:(*)</B>
                              </td>
                              <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtTelefone"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="24"
                                                Height="20"
                                                Width="200"
                                />
                             </td>
              </tr>   
              <tr>
                             <td>
                                    <p  align="right">
                                    <B>País:(*)</B>
                             </td>
                             <td>
                                    <asp:TextBox 
                                                runat=server
                                                id="txtPaís"
                                                Text=""
                                                TextMode="SingleLine" 
                                                Font_Face="Arial" 
                                                Font_Size="3"
                                                MaxLength="15"
                                                 Height="20"
                                                Width="200"
                                />
                              </td>
                         <td>
              </tr>
              <tr>
                             <td>
                                    <p  align="right">
                                    <b>Clique no botão  Cadastrar.</b>
                             </td>
                             <td>
                                 <asp:Button 
                                                id="CadastraCliente"
                                               Text="Cadastrar  Cliente"
                                               runat="server"
                                               OnCLick="InserirCliente"
                                   />
                             </td>
         </tr>
         <tr>
                <td> <B><p  align="right"> *** </B> </td>
                <td> <B> Campos  de preenchimento obrigatório </B> </td>
        </tr>
</table>
</div>
</form>
</body>
</html>

Digite o código da Listagem 12.4 e salve o mesmo em um arquivo chamado chap12ex4.aspx, na pasta chap12, dentro da pasta wwwroot, conforme descrito no item: “Check List para acompanhar os exemplos deste livro”, no Capítulo 6.

Para acessar esta página utilize o seguinte endereço:

http://localhost/chap12/chap12ex4.aspx

Ao carregar a página você obtém o resultado indicado na Figura 12.8, onde é apresentado um formulário para que você digite as informações do cliente a ser Cadastrado.

Curso Completo de ASP.NET - Júlio Battisti
Figura 12.8 Formulário para cadastro de Clietnes.

Digite informações para um cliente fictício, porém deixe o campo Telefone, que é um campo obrigatório em branco. Clique no botão Cadastrar Clientes. O cadastro do cliente não é feito e você é informado que o campo Telefone é obrigatório, conforme indicado na Figura 12.9.

Curso Completo de ASP.NET - Júlio Battisti
Figura 12.9 Os controles de validação em ação.

Digite um valor para o telefone e dê um clique no botão Cadastrar Cliente. Agora sim, o cliente é cadastrado e o formulário é reapresentado, para que você possa cadastrar outro cliente, conforme indicado na Figura 12.10..

Curso Completo de ASP.NET - Júlio Battisti
Figura 12.10 Cliente cadastrado com sucesso.

Comentários sobre o código do exemplo – Chap12ex1.aspx.

  • Para alinhar os controles, na seção de apresentação, utilizamos uma tabela com duas colunas. Na primeira coluna colocamos um texto descritivo do campo e na segunda coluna, um controle TextBox para que o usuário digite informações.
  • Utilizamos controles de validação do tipo RequiredFieldValidator, para garantir que os seguintes campos sejam preenchidos:
    • CódigoDoCliente
    • NomeDaEmpresa
    • Endereço
    • Telefone
    • País

Nota: Na prática, todos os campos da tabela Clientes são configurados para não aceitar valores nulos. Se você, por exemplo, não digitar um valor para o campo Cidade (que não possui um campo de validação associado), na hora de salvar o registro será gerado o erro indicado na Figura 12.11. Isto acontece porque o campo Cidade, na tabela Clientes, do banco de dados NorthWind.mdb, não aceita valores nulos. Para solucionar esta opção, basta adicionar controles de validação do tipo – RequiredFieldValidator, para todos os controles do formulário. Desta forma, as informações somente serão enviadas para o banco de dados, quando todos os controles estiverem preenchidos.

Curso Completo de ASP.NET - Júlio Battisti
Figura 12.11 Erro ao deixar um campo Requerido em branco.

Observe o trecho da mensagem de erro, transcrito a seguir:

Exception Details:  System.Data.OleDb.OleDbException: O campo 'Clientes.Cidade' não
pode ser uma seqüência de caracteres de comprimento nulo.
  • Para inserir o registro do cliente, na tabela Clientes, do banco de dados NorthWind.mdb, utilizamos o evento OnClick do botão CadastraCliente. Criamos o procedimento InserirCliente, que é executado em resposta ao evento OnClick do botão de comando.

O evento InserirCliente faz o seguinte:

1.         Conecta com o banco de dados utilizando os comandos já vistos em exemplos anteriores.

2.         Cria um objeto DataTable – Clientes, e define a chave primária:

DataTable  Clientes = ds.Tables[0];
      Clientes.PrimaryKey = new DataColumn[] {Clientes.Columns["CódigoDoCliente"]};

3.         Cria uma nova linha, define o valor dos campos desta linha e adiciona a linha á coleção de linhas da tabela Clientes:

            DataRow Linha = Clientes.NewRow();
                // Defino os valores para a linha a ser inserida.
                   Linha["CódigoDoCliente"]   = txtCódigoDoCliente.Text;
                   Linha["NomeDaEmpresa"]     = txtNomeDaEmpresa.Text;
                   Linha["NomeDoContato"]     = txtNomeDoContato.Text;
                   Linha["CargoDoContato"]    = txtCargoDoContato.Text;
                   Linha["Endereço"]          = txtEndereço.Text;
                   Linha["Cidade"]            = txtCidade.Text;
                   Linha["Região"]            = txtRegião.Text;
                   Linha["CEP"]               = txtCEP.Text;
                   Linha["País"]              = txtPaís.Text;
                   Linha["Telefone"]          = txtTelefone.Text;
                   Linha["Fax"]               = txtFax.Text;
            Clientes.Rows.Add(Linha);

4.         Crio um objeto OleDbCommandBuilder, utilizo o método GetInsertCommand deste objeto para definir a propriedade InsertCommand do objeto DataAdapter e chamo o método Update do objeto DataAdapter:

      OleDbCommandBuilder CriaComando = new  OleDbCommandBuilder(MeuDataAdapter);
      MeuDataAdapter.InsertCommand= CriaComando.GetInsertCommand();
      MeuDataAdapter.Update(ds,"Clientes")

5.         Exibo informações de que o cliente foi cadastrado com sucesso e “limpo” os valores contidos nos controles TextBox, para que usuário possa digitar informações de outro Cliente.

 Label1.Text = "Registro para o cliente: " + txtNomeDaEmpresa.Text + " Inserido com sucesso";
 Label2.Text = "Preencha os campos abaixo para cadastrar outro Cliente";
        // Limpo o valor dos campos TextBox.
        txtCódigoDoCliente.Text = "";
        txtNomeDaEmpresa.Text   = "";
        txtNomeDoContato.Text   = "";
        txtCargoDoContato.Text  = "";
        txtEndereço.Text        = "";
        txtCidade.Text          = "";
        txtRegião.Text          = "";
        txtCEP.Text             = "";
        txtPaís.Text            = "";
        txtTelefone.Text        = "";
        txtFax.Text             = "";
  • Ok. Um novo Cliente foi cadastrado no banco de dados NorthWind.mdb. A seguir veremos como definir as operações de Exclusão e Edição de registros. Para isso utilizaremos as propriedades DeleteCommand e UpdateCommand, do objeto DataAdapter.

« Lição anterior Δ Página principal ¤ Capítulos Próxima lição »
Quer receber novidades e e-books gratuitos?

 
 

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2024 ®

LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO

DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI