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
« 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.
Observe o seguinte trecho da mensagem de erro: Exception Details: System.Data.ConstraintException: Column 'CódigoDoCliente' 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:
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.
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.
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..
Comentários sobre o código do exemplo – Chap12ex1.aspx.
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.
Observe o trecho da mensagem de erro, transcrito a seguir: Exception Details: System.Data.OleDb.OleDbException: O campo 'Clientes.Cidade' não
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 = "";
|
|||
« Lição anterior | Δ Página principal | ¤ Capítulos | Próxima lição » |
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