Curso Prático de Visual
Curso Prático de Visual
Curso Prático de Visual
NET
1
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
3
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
4
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Um bom estudo a todos e espero, sinceramente, que este curso possa ajudá-
los a utilizar melhor os recursos avançados dessa nova plataforma da
Microsoft .NET.
5
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
6
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
7
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
ÍNDICE
INTRODUÇÃO E INSTALAÇÃO..........................................................13
1987 .......................................................................................133
1989 .......................................................................................133
8
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
1990 .......................................................................................133
1991 .......................................................................................134
1996 .......................................................................................134
1999 .......................................................................................134
PROVEDOR DE SERVIÇO..............................................................135
XML ? ....................................................................................136
DISTRIBUIÇÃO ..........................................................................137
ELEMENTOS .............................................................................138
ATRIBUTOS ..............................................................................138
COMENTÁRIOS ..........................................................................139
9
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
MOBILIDADE ............................................................................236
INTERFACE ..............................................................................237
ARQUIVOS ................................................................................237
SEGURANÇA .............................................................................240
HARDWARE ..............................................................................241
PRATICANDO ............................................................................258
10
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
11
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
12
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Introdução e instalação
Referência: 1-1
Depois que for feita toda a verificação necessária, aparecerá outra tela para
a instalação dos requisitos do sistema. Lembre-se de que para usar
aplicações para Web usando o Visual Studio. Net, deve-se ter o IIS
(Internet Information Services) instalado. Caso você não tenha, na entrada
do primeiro cd será requisitada a sua instalação, antes de tudo. Lembro que
para a versão do Visual Studio.NET 2005 não é necessário ter instalado no
pc o IIS, ou seja, o desenvolvedor por usar a ferramenta tranquilamente
sem IIS comentado anteriormente. Para o alívio do desenvolvedor, a
13
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-2
14
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência:1-3
15
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-4
16
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-5
Existe uma licença que você deve ler e em seguida aceitar. Embora
normalmente ninguém leia as licenças que quase todo sistema exibe, é
sempre bom ler as informações contidas nelas, para depois aceitar ou não.
Todas as informações contidas na licença são importantes e devem ser
lidas.
17
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-6
18
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-7
19
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-8
20
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-9
21
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-10
Veja que na minha máquina a instalação foi feita com sucesso. Logo após a
instalação do pré-requisito, clique no link done para fechar a janela.
Automaticamente se abrirá outra janela para definitivamente instalar o
Visual Studio.Net.
22
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-11
23
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-12
24
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-13
25
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-14
Ao desmarcar algumas opções que não irei usar, observe que houve um
aumento de cerca de 1 Giga de espaço livre. Quando terminar, clique em
Install Now. Outra tela surgirá, gerando um script para instalar tudo o que
foi marcado.
26
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-14
27
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-16
28
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-17
Na instalação que foi feita no computador, não deu erro. Nesse relatório
pode ser visto o log da instalação e muito mais. Clicando depois em done,
uma outra tela surgirá para a instalação do Msdn Help.
29
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-18
30
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-19
31
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 1-20
32
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
33
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Observação: não se preocupe com o layout da página, nem com estilos, mas
primeiramente com a programação. Mais tarde usarei estilos para colocar
em ordem todos os nossos problemas em relação a layout. É bom usar
também tableless, uma nova forma de criar sites e sistemas. Ficam mais
rápidos para ser mostrados no browser que irá utilizar. O interessante é que
pode abrir em qualquer cliente, como firefox, internet explorer e outros que
existem no mercado.
34
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja como vai ficar a sua tela para programação; note que do seu lado
direito existe mais uma aba com ferramentas. Há uma barra lateral do lado
esquerdo da sua tela chamada Toolbox, além de palestras e ferramentas que
podem ser usadas, facilitando o desenvolvimento de qualquer sistema.
Primeiro vou colocar na página um Label. Clique nele e arraste-o dentro da
página.
35
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Vamos ver como ficou a página funcionando. Para isso, entre na aba
Solution Explorer e clique com o botão direito do mouse em cima da
página default.aspx. Clique na opção Set as Start Page, com isso
colocando-a como a página principal do seu sistema. Veja como fazer:
36
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Agora irei executá-la; veja como ficará no seu browser ou cliente. Clique
no menu Debug e logo após em Start. A tela a seguir indica o
procedimento. Existem alguns atalhos, como F5.
37
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja como ficará a sua página no browser. Note que ficará do mesmo jeito
construído no seu cliente.
38
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
O Visual Studio.Net 2003 possui dois códigos fontes para você trabalhar,
mais à frente falarei sobre eles. Se você notar, a parte de código visual que
se encontra logo que você abre a página, quando entra no projeto, é a parte
de Design. Vou passar para a parte HTML, e tudo o que fizer na parte de
Design do Visual Studio automaticamente será programado pelo sistema no
código HTML. Clique na aba HTML.
Para quem sabe um pouco de TAGS HTML, vale notar que são diferentes
do próprio HTML puro. Essa parte de HTML é chamada de TAGLIB. Tags
prontas para receber um tipo de parâmetro pelo servidor. Veja a seguir o
39
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Note que é criada uma outra página automática, com extensão .CS. A
extensão .CS é um produto da linguagem C# (C Sharp). Todo código é
orientado aos objetos, seguindo todo o padrão necessário. No método
private void page_load (object sender, System.EventArgs e) digite o
seguinte código:
40
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Explicando código:
Lembre-se que falei que todos os objetos da tela precisam ter um ID (o
LABEL colocado acima tem o ID chamado LABEL1). Todo LABEL tem
uma propriedade chamada TEXT. O código acima está sendo atribuído ao
seu LABEL da tela através de um valor entre aspas duplas (“ ”). O motivo
do uso das aspas duplas é devido ao fato de serem uma STRING. Agora,
salve o que foi feito e execute o programa.
41
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Label – lblTitulo
TextBox – txtNome
Button – cmdEnviar
42
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
DataGrid – dtGridRelatorio
CheckBox – ckRevista
CheckBoxLis – ckListaRevista
RadioButton – rdOpcao
RadioButtonList – rdListaOpcao
43
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Na figura acima, mostra apenas como clicar com o botão direito no projeto
e adicionar mais uma página aspx, coloque o nome da mesma como
frmId.aspx..
44
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
45
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Irei mostrar as propriedades mais comuns do Label, não posso esquecer que
todos os componentes que usamos no Visual Studio.NET tem Properties.
Veja a figura abaixo e a explicação de cada propriedade:
46
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
47
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Enabled: significa que irá deixar o label habilitado ou não, os valores são
true e false, se true está habilitado, se false desabilitado, quando
desabilitado o usuário não pode clicar no label;
TabIndex: nessa propriedade indico qual o objeto da tela coloco o foco
primeiro quando clico na tecla TAB do teclado;
ToolTip: nessa propriedade pode-se colocar uma descrição qualquer, com
isso o usuário posicionando o mouse em cima do label aparecerá uma ajuda
para o mesmo, chamamos isso grosseiramente de HINT;
48
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
No começo desse capítulo, falei um pouco sobre os objetos de tela que são
mais usados no Visual Studio.NET e em uma aplicação WEB, estarei
detalhando mais os objetos e informando para que serve.
49
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
50
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
RadioButtonList
Id = rdListaOpcao
AutoPostBack = True
Items
Text = Email
Value = 1
Text = Telefone
Value = 2
Label’s
Label
Text = Email:
Id = lblEmail
51
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Visible = False
Label
Text = Telefone:
Id = lblTelefone
Visible = False
TextBox’s
TextBox
Id = txtEmail
Visible = False
TextBox
Id = txtTelefone
Visible = False
lblEmail.Visible = true;
txtEmail.Visible = true;
}
else
{
lblTelefone.Visible = true;
txtTelefone.Visible = true;
lblEmail.Visible = false;
txtEmail.Visible = false;
}
}
53
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
54
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
A tela acima exibirá o resultado final dessa primeira etapa. Agora digite
alguma coisa no campo “e-mail”. Clicando na opção “telefone”, digite algo,
volte para o campo “e-mail” e note que o programa mantém
automaticamente o que foi digitado, sem nenhum problema ou interferência
de código.
55
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
56
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Text = Email
Value = 1
Text = Telefone
Value = 2
AutoPostBack = true
57
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodo para sumir com os campos de email
/// dinamicamente
/// </summary>
/// <summary>
/// Metodo para sumir com os campos de Telefone
/// dinamicamente
/// </summary>
public void sumirTelefone()
{
txtTelefone.Visible=false;
lblTelefone.Visible=false;
}
/// <summary>
/// Metodos para aparecer os campos de email
/// dinamicamente
58
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// </summary>
public void aparecerEmail()
{
lblEmail.Visible=true;
txtEmail.Visible=true;
}
/// <summary>
/// Metodos para aparecer os campos de telefone
/// dinamicamente
/// </summary>
public void aparecerTelefone()
{
txtTelefone.Visible=true;
lblTelefone.Visible=true;
}
Explicando o código:
Os métodos foram criados porque, quando precisamos deles, basta acessá-
los normalmente, economizando linha de códigos.
sua_variável, que por sinal deveria ser string. Dentro do método, peguei os
objetos da tela e optei por visível ou não visível. No caso do código acima,
txtEmail.Visible=false, o objeto “e-mail” estará invisível, quando o método
for chamado.
Explicando o código:
Perceba que agora estou apenas chamando os métodos criados, eles que vão
se encarregar de sumir com os objetos da tela, automática e dinamicamente.
60
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Insira o seguinte código, depois de ter clicado duas vezes no objeto de tela
“cmbOpcoes”.
Explicando o código:
Note que estou colocando o mesmo código que usei no outro objeto da
tela; a única diferença é o if (cmbOpcoes.SelectedValue == “1”).
“SelectedValue” serve apenas para verificar o valor do objeto selecionado.
Logo após o “if” chamarei somente os métodos criados anteriormente, para
aparecer ou sumir com os objetos de tela.
61
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
62
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Agora vou escolher ou selecionar qualquer objeto, que fará a mesma rotina.
Selecione pela “combo” a opção “e-mail”, como na tela a seguir:
Estarei explicando como depurar o código que estou escrevendo, linha por
linha. Dentro do seu Visual Studio.Net, acesse a classe default.cs e marque
na linha do lado esquerdo, criando uma bolinha vermelha na linha toda.
63
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
64
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Para continuar depurando o código existem duas teclas, uma para entrar no
método e outra para não entrar no método de outra classe, por exemplo.
65
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
66
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Existem vários tipos de objetos que usei no C#.Net junto com o Visual
Studio.Net; alguns complicados e outros simples. Adiante utilizaremos
conexão com banco de dados mysql.
67
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja o código:
/// <summary>
/// Metodos para aparecer os campos de email
/// dinamicamente
/// </summary>
public void aparecerEmail()
{
lblEmail.Visible=true;
txtEmail.Visible=true;
ckSistema.Visible=true;
68
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodos para aparecer os campos de telefone
/// dinamicamente
/// </summary>
public void aparecerTelefone()
{
txtTelefone.Visible=true;
lblTelefone.Visible=true;
ckSistema.Visible = true;
}
69
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Button
Id = cmdEnviar
Text = Enviar
Visible = False
70
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodos para aparecer os campos de email
/// dinamicamente
// </summary>
public void aparecerEmail()
{
lblEmail.Visible=true;
txtEmail.Visible=true;
ckSistema.Visible=true;
cmdEnviar.Visible=true;
}
71
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodos para aparecer os campos de telefone
/// dinamicamente
/// </summary>
public void aparecerTelefone()
{
txtTelefone.Visible=true;
lblTelefone.Visible=true;
ckSistema.Visible=true;
cmdEnviar.Visible=true;
}
72
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (telefone != null)
Response.Write("Seu telefone: " + telefone);
if (email != null)
Response.Write("<br>Seu email: " + email);
if (sistema != null)
Response.Write("<br>Opção de Sistema
Marcado");
}
Request.Params["txtTelefone"];
No código acima, o que está dentro do colchete deve ter o mesmo nome
que está na página anterior, default.aspx. Perceba que a linha está
terminando com ponto e vírgula (;). Isso deve ser feito para todos os
parâmetros, com uma nova atribuição (string) para cada um deles.
if (telefone != null)
Response.Write("Seu telefone: " + telefone);
74
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
75
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Essa última parte que você estudou é sobre transferência de dados entre
páginas usando o “form via post”.
76
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Use a barra ToolBox para adicionar o componente na sua página nova. Crie
uma outra página, e conseqüentemente outra classe, chamada
frmLista.aspx. Confira a figura a seguir:
LISTBOX’S
id = lstOrigem
Items
Text = << Selecione >>
Value = 0
Text = Macarrão
77
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Value = 1
Id = lstDestino
Items
Text = << Selecione >>
Value = 0
SelectionMode = Multiple
BUTTON’S
Id = cmdEnviar
Text = >>
Id = cmdRemover
Text = <<
78
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
this.lstDestino.Items.Add(this.lstOrigem.SelectedItem);
this.lstOrigem.Items.RemoveAt(this.lstDestino.SelectedIndex);
}
}
if (lstOrigem.SelectedIndex > 0)
lstDestino.Items.Add(this.lstOrigem.SelectedItem);
lstOrigem.Items.RemoveAt(this.lstDestino.SelectedIndex);
79
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
this.lstOrigem.Items.Add(this.lstDestino.SelectedItem);
this.lstDestino.Items.RemoveAt(this.lstDestino.SelectedIndex);
}
}
Explicando o código.
80
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Não posso deixar de falar que, no Visual Studio.NET 2005 beta II já está
podendo validar por grupos, posso escolher um grupo de validadores e
depois validar com os botões. No 2003 existe um problema um pouco grave
quando é usado validador dentro de um webcontrol. Usando um webcontrol
e na pagina principal também estiver usando um validador,
obrigatoriamente os dois formulários terão que ser preenchidos para que o
validator funcione corretamente. No 2005 Beta II posso definir por grupo
usando uma propriedade.
Com o Visual Studio.Net 2003, não preciso saber mais uma linguagem de
programação para validar os campos. Estarei usando alguns componentes
da própria ferramenta, onde automaticamente serão criados scripts para a
validação dos mesmos. Primeiramente, crie uma nova página e uma nova
classe no mesmo projeto, chamada validaCampos.aspx.
81
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
TextBox
Id= txtEmail
Label
Id = lblEmail
Text = Email:
TextBox
Id = txtNome
Width = 232px
Label
Id = lblNome
82
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Text = Nome:
TextBox
Id = txtSenha
Width = 128px
TextMode = Password
Label
Id = lblSenha
Text = Senha:
TextBox
Id = txtConfirmacao
Width =128px
TextMode = Password
Label
Id = lblConfirmacao
Text = Confirmação de Senha:
Button
Id = cmdEnviar
Text = Enviar
83
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Até agora, foram colocados somente os campos que você já sabe fazer.
Agora usarei alguns componentes. Veja a figura a seguir:
84
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Id = valEmail
ErrorMessage = Digite o Email:
Display = Static
ControlToValidate = txtEmail (ID do campo do formulário: ao clicar na
aba “properties”, você poderá escolher o campo do formulário, entre todos
os campos).
85
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Id = valSenha
Display = Static
ErrorMessage = Digite a Senha
ControlToValidate = txtSenha
Id = valConfirmacao
ControlToValidate = txtConfirmacao
ErrorMessage = Digite a Confirmação da Senha
Display = Static
86
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Id = validaComparacao
ControlToCompare = txtConfirmacao
ControlToValidate = txtSenha
ErrorMessage = Digite a confirmação da senha corretamente !!
Display = Static
87
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Explicando o código:
88
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Vejamos alguns objetos que são usados para fazer a conexão a seguir:
89
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
using System.Data.Odbc;
90
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Fazendo conexao com o banco de dados
/// MYSQL
/// </summary>
Explicando o código:
Essa string de conexão será gerada em uma classe criada. Estou chamando
um objeto OdbcConnection, passando uma string de conexão com banco de
dados, usuário e senha.
Campos:
Ch_usu = chave do usuário que será criada automaticamente
No_usu = nome do usuário cadastrado
Email_usu = e-mail do usuário cadastrado
using System;
using System.Data.Odbc;
namespace PrimeiroSistema.componentes
{
/// <summary>
/// Classe com métodos para conectar no banco de dados mysql
/// </summary>
public class clsBanco
{
/// <summary>
/// Fazendo conexao com o banco de dados
/// MYSQL
/// </summary>
public OdbcConnection sConn = new
OdbcConnection("Driver={MySQL ODBC 3.51
Driver};Server=bsb066666;DataBase=bd_geral;uid=root;pwd=;option=3");
92
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodo para conectar no banco de dados
/// </summary>
public void Conecta()
{
try
{
///Estamos verificando se o status
///da conexão está fechada
if (sConn.State==0)
{
sConn.Open();
}
else
{
sConn.Close();
}
}
catch(Exception e)
{
throw new Exception("Banco de dados Fora:
classe clsBanco.cs "+ e.StackTrace);
}
}
/// <summary>
/// Metodo para desconectar do banco de dados
/// </summary>
public void Desconecta()
{
try
93
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
{
///Verifico se o status do
///banco de dados está ///diferente de fechado
if (sConn.State!=0)
{
sConn.Close();
}
else
{
sConn.Close();
}
}
catch(Exception e)
{
throw new Exception("Erro no Banco de
Dados: classe clsBanco.cs "+ e.StackTrace);
}
}
}
}
Seguindo com o código, você verá que ele está dentro de uma linha
chamada “try e catch”. No momento não estou explicando muito esses
códigos; trataremos deles em capítulos posteriores. O que posso adiantar é
que se ocorrer algum erro, em qualquer parte do código, o mesmo gerará
uma “exception” com o código de erro e descrição.
95
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
96
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja a seguir:
97
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
namespace PrimeiroSistema.componentes
{
/// <summary>
/// Classe para inserir usuario.
/// </summary>
public class clsInserir
{
/// <summary>
/// Chamando primeiro a classe de banco de dados para ser
/// usada mais tarde dentro desta classe
/// </summary>
PrimeiroSistema.componentes.clsBanco sBanco = new
clsBanco();
/// <summary>
/// Método para inserir usuário no banco de dados MYSQL
/// </summary>
/// <param name="nome">nome do usuario</param>
/// <param name="email">email do usuario</param>
/// <returns>true / false</returns>
public Boolean inserirUsuario(string nome, string email)
{
Boolean bResultado = false;
try
{
///Abrindo a conexão com o banco de dados
sBanco.Conecta();
98
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
///executando o código
bResultado =
Convert.ToBoolean(sqlC.ExecuteNonQuery());
///retornando resultado
return bResultado;
}
catch(OdbcException e)
{
///se ocorrer algum erro, passará o erro
ocorrido
throw new Exception("Erro ao inserir, método
clsInserir.cs" + e.StackTrace);
}
finally
{
///fechando conexao aberta do banco
sBanco.Desconecta();
}
}
}
}
99
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Explicando o código:
sqlC.ExecuteNonQuery();
Esta linha está incompleta, de acordo com o código que foi digitado.
Executando apenas do modo acima, o método retornará um “int”, e com
isso o nosso método aguardará um retorno em Boolean. Por isso converti o
resultado do método para Boolean. Observe o código a seguir:
///executando o código
bResultado = Convert.ToBoolean(sqlC.ExecuteNonQuery());
101
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
102
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
PrimeiroSistema.componentes.clsInserir
sInserir = new PrimeiroSistema.componentes.clsInserir();
104
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
105
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
106
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
107
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
No capítulo anterior, você notou que incluí no banco de dados alguns dados
inseridos pelo usuário. Esse capítulo mostrará como montar dados na tela
usando DataGrid.
108
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Como foi dito antes, essa classe mostra os dados do banco. O método
retorna um objeto chamado DataSet. Veja o código a seguir:
namespace PrimeiroSistema.componentes
{
/// <summary>
/// Classe para gerar relatorio
/// </summary>
public class clsRelatorio
{
/// <summary>
109
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodo que busca relatorio e traz dataSet
/// </summary>
/// <returns>DataSet</returns>
public DataSet buscaRelatorio()
{
try
{
///Abrindo conexao
sBanco.Conecta();
///retornando dataset
return dtSet;
}
catch(OdbcException e)
{
///gerando uma exception e mostrando onde
está dando o erro
throw new Exception("Erro na classe
clsRelatorio " + e.StackTrace);
}
finally
{
///fechando a conexao com o banco de dados
sBanco.Desconecta();
}
}
}
}
Explicando o código:
using System.Data;
Observando o código acima, note que ele é um método público, que retorna
um objeto DataSet. O método chama-se “buscarelatório”, e não tem
nenhum parâmetro de entrada, e por isso está apenas abrindo e fechando
parênteses.
///Abrindo conexao
sBanco.Conecta();
Antes de abrir a conexão, veja essa variável que criei mais acima, com o
nome sBanco. Digitando o mesmo nome e colocando “ponto”, abri todos os
métodos disponíveis para usar. Com isso, veja que o método “conectar”
está disponível apenas pelo fato de ser público. Para fazer um teste, vá até a
classe e coloque o método “public void Conectar()”.Depois clique em
private void Conectar(), e você verá que quando digitar a variável e colocar
(ponto), nessa classe clsRelatorio.cs, o método “Conectar()” não estará
disponível para ser usado.
112
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Lembre-se que nessa classe o método retornará um objeto DataSet, por isso
estamos apenas chamando uma variável do tipo DataSet.
///retornando dataset
return dtSet;
113
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
finally
{
///fechando a conexao com o banco de dados
sBanco.Desconecta();
}
Nessa parte do código, depois que executar todas as linhas, antes de sair do
método, você irá finalizar, desconectando o banco de dados.
114
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
115
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
116
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn
DataField="ch_usu" Visible="False"></asp:BoundColumn>
<asp:BoundColumn
DataField="no_usu" HeaderText="Nome"></asp:BoundColumn>
<asp:BoundColumn
DataField="email_usu" HeaderText="Email"></asp:BoundColumn>
<asp:HyperLinkColumn
Text="Alterar" DataNavigateUrlField="ch_usu"
DataNavigateUrlFormatString="../alterar/alteraProduto.aspx?CH_PROD={
0}"
HeaderText="Alterar
Produto"></asp:HyperLinkColumn>
</Columns>
</asp:DataGrid>
Explicando o código:
Esse objeto que coloquei acima serve para exibir os dados que irei trazer do
banco de dados, usando aquela classe que desenvolvemos.
<Columns>
117
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
A “tag” acima é uma “sub tag” dentro da “taglib DataGrid”. Dentro dela
poderei colocar as colunas que mostrarei. Esse objeto dataGrid terá um
“checkBox” onde poderei marcar os itens que deletarei do banco de dados.
Aproveitarei a tabela com o nome do usuário e e-mail para excluir os
cadastrados. Analisando o código, você verá como foi feito.
118
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace PrimeiroSistema
{
/// <summary>
/// Summary description for frmRelatorio.
/// </summary>
119
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodo para preencher o objeto datagrid com os dados
/// vindo do banco
/// </summary>
private void preencheGrid()
{
PrimeiroSistema.componentes.clsRelatorio sRel =
new PrimeiroSistema.componentes.clsRelatorio();
this.DataGrid1.DataSource = sRel.buscaRelatorio();
this.DataGrid1.DataBind();
}
////////////////////////////////////////////////////////////////
///Adicionando o Javascript ao CheckBox
////////////////////////////////////////////////////////////////
if (e.Item.ItemType == ListItemType.Header)
{
CheckBox ck =
(CheckBox)e.Item.FindControl("ckHead");
if(ck != null)
ck.Attributes.Add("onclick","selecionarTodos(this);");
}
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
CheckBox ck =
(CheckBox)e.Item.FindControl("ckItem");
if (ck != null)
ck.Attributes.Add("onclick","desselecionarTodos();");
}
///////////////////////////////////////
///Fim
//////////////////////////////////////
}
///no método
PrimeiroSistema.componentes.clsExcluir sExcluir =
new PrimeiroSistema.componentes.clsExcluir();
sExcluir.excluirDados(Convert.ToInt32(id.Text));
}
}
preencheGrid();
}
}
}
Explicando o código:
122
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
123
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
<script>
function selecionarTodos(ckall){
var actVar = ckall.checked;
for (i=0; i<Form1.length; i++){
if (Form1.elements[i].type ==
"checkbox"){
if
(Form1.elements[i].name.indexOf("ckItem")!= -1){
Form1.elements[i].checked = actVar;
}
}
}
}
function desselecionarTodos(){
var status = true;
for(i=0; i<Form1.length; i++){
if(Form1.elements[i].type=="checkbox" &&
Form1.elements[i].name !="ckHead"){
if(Form1.elements[i].name.indexOf("ckItem") != -1){
if(Form1.elements[i].checked==false){
status=false;
}
124
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
}
}
}
}
</script>
125
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Criarei agora uma classe para excluir os dados do objeto que criamos
acima, chamado DataGrid. A classe tem um método público e sem retorno,
que passa um parâmetro que é a chave do banco “ch_usu”. Clique com o
botão direito em cima da pasta “componentes” e crie uma classe chamada
clsExcluir.cs. Veja a figura a seguir:
namespace PrimeiroSistema.componentes
{
126
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Classe para excluir dados do banco
/// </summary>
public class clsExcluir
{
/// <summary>
/// Metodo chamando classe do banco de dados
/// para ser usada abaixo
/// </summary>
PrimeiroSistema.componentes.clsBanco sBanco = new
clsBanco();
/// <summary>
/// Metodo responsável para deletar dados do banco
/// nao retona nada
/// </summary>
/// <param name="chave">chave do usuario</param>
public void excluirDados(int chave)
{
try
{
///Conectando com o banco de dados
///abrindo conexao
sBanco.Conecta();
127
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Explicando o código:
129
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Como foi dito antes, os Web Services podem ser chamados por
aplicações desktop, sistemas mainframe, web brownsers e até mesmo
130
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Integração de Aplicações
132
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Computação Distruida
1987
A Sun Microsystems desenvolve o Open Network Computing
(ONC), sistema RPC que estabelece um mecanismo de comunicação básica
para o Network File System (NFS).
A Apollo Computer desenvolve o Network Computing System (NCS),
sistema RPC para seu sistema operacional Domain.
1989
A Open Software Foundation (OSF, hoje The Open Group) solicita
submissões para incorporar um sistema RPC ao seu Distributed Computing
Environment (DCE). O sistema escolhido é o NCS, agora da HP.
1990
A Microsoft baseia suas iniciativas em RPC em uma versão modificada do
DCE/RPC.
133
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
1991
A versão 1.0 do DCE é apresentada pela OSF.
CORBA 1.0 é lançado com uma linguagem única de mapeamento para a
linguagem C. O termo Object Request Broker (ORB) ganha popularidade
como uma infraestrutura para objetos distribuídos.
1996
Microsoft lança o Distributed Component Object Model (DCOM), que
segue a linha dos esforços anteriores da Microsoft na área de
componentização e tendo como base as tecnologias de RPC da Microsoft.
1999
Sun apresenta a J2EE (Java 2 Platform Enterprise Edition), que integra
RMI com IIOP, tornando fácil a interoperabilidade entre Java e sistemas
CORBA.
134
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
O Simple Object Acess Protocol (SOAP) aparece pela primeira vez. Tem
inicio a era dos web services.
Provedor de Serviço
Um provedor de serviço é responsável por criar a descrição de um serviço,
publicando esta descrição para um ou mais registros de serviços, e
recebendo chamdas de um ou mais requisitores de serviço. Pode ser
comparar um Provedor de Serviço com o servidor de um relacionamento
cliente-servidor.
Requisitor de Serviço
Um requisitor de serviço é responsável por encontrar a descrição de um
serviço publicado em um ou mais Requisitores de Serviço. E é responsável
pelo uso das descrições de serviços para chamar o Web Service hospedado
em um Provedor de Serviço. Um consumidor de Web Services pode ser
considerado um requisitor de serviço.
Registrador de Serviço
Um registrador de serviço é responsável por divulgar as descrições de
serviços publicados nele pelo Provedor de Serviço e por permitir que o
requistor de serviço procure um serviço qualquer nesta lista de descrições.
135
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Pilhas de interoperabilidade
XML ?
136
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Distribuição
Orientação a Dados
137
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
<ROOT>
<PESSOA>
<NOME>Maurilio Paulo Alberto Santos</NOME>
<ENDERECO>SQN 908 BL.3 AP.199</ENDERECO>
<DATA_NASC>23/03/2002</DATA_NASC)
<EMAIL>[email protected]</EMAIL>
</PESSOA>
</ROOT>
Elementos
<objetivo>Livro</objetivo>
Atributos
Atributos são pares de nomes e valores que ocorrem dentro de uma tag
inicial depois do nome de um elemento. Veja o exemplo a seguir:
138
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
<objetivo tipo=”qualquer”>Livro</objetivo>
Comentários
139
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
140
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
A figura acima mostra apenas depois que foi criado o projeto no seu Visual
Studio.NET. Na figura abaixo estaremos criando um arquivo chamado
Servico.asmx, essa é a extensão do arquivo para o WebService. Clique com
o botão direito em cima do projeto, clique na opção ADD, logo após ADD
New Item. Segue a figura abaixo mostrando o exemplo citado acima:
141
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
142
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
143
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
144
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
145
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Codificando WebService
/// <summary>
/// Metodo que apenas retorna o que escrevi
/// no campo solicitado do webservices.
/// </summary>
/// <param name="minha_pagina">valor de retorno</param>
/// <returns>string</returns>
[WebMethod(Description="Meu primeiro webservices")]
public string Testando(string minha_pagina)
{
return minha_pagina;
}
Explicando o código:
Estou fazendo apenas um simples e prático WebService para que veja como
funciona. Ele apenas recebe uma string e retorna essa mesma string passada
para o XML.
Esse comentário [WebMethod ... é apenas para que o desenvolvedor que
for utilizar o mesmo, veja o comentário abaixo do sistema mostrando como
utilizar.
Não posso esquecer de colocar o <summary> na parte de cima do código,
depois do sistema todo criado e funcionando corretamente, a documentação
pode ser criada automaticamente pela ferramenta Visual Studio.NET; isso
mostrei como fazer nos capítulos posteriores.
147
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
148
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
149
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Não pode ser esquecido dos comentários que existem nessa página onde
encontra-se o método que crei.
Existem um comentário sobre o SOAP, mostrando as variáveis ou variável
do método e o tipo dela em forma de tag XML.
Mais abaixo em HTTP POST mostra a variáevel que será retornada, junto
com o tipo dela, no meu caso string.
Coloque um valor no campo texto na tela e clique no botão INVOKE, o
sistema abrirá outra tela e mostrará com o resultado em XML, veja na
figura abaixo de como fazer:
150
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
151
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
152
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Portanto, um serviço criado na internet que pode ser muito usado por
empresas ou pessoas, por exemplo, a verificação de nomes de pessoas no
SPC (CERASA), pode criar uma idéia e cobrar por acesso a pesquisa, o
mais importante é que podes criar para ter acesso até pelo celular,
funcionando sem problemas com a mais rápida tecnologia e rapidez de
acesso.
Voltando para a página que irei criar, onde acessará o WebService, o nome
da página será acessando.aspx e terá alguns componentes simples de tela.
Veja a figura e a especificação abaixo:
153
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Label
Id = lblDados
Text = Dados:
Label
Id = lblResultado
TextBox
Id = txtDados
Button
Id = cmdAcessar
154
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Text = Acessar
Clicando no botão indicado acima, irá aparecer uma tela para eu colocar o
endereço do WebService criado. O endereço que coloquei foi:
http://localhost/primeirowebservice/servico.asmx.
155
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
156
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodo para acessar o webservice passando o parâmetro
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmdAcessar_Click(object sender, System.EventArgs e)
{
///instanciando o serviço da web que criei
localhost.Servico sServico = new PrimeiroWebService.localhost.Servico();
157
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Ok, agora fiz o primeiro webservice, porém ainda não coloquei para
funcionar, nem mesmo sei se funciona direito.
Marquei para depurar na linha de depois de clicar no botão. Para marcar
uma linha, basta clicar do lado esquerdo em direção a linha do código. Não
podendo esquecer que o mesmo ficará marcado de vermelho.
Veja a figura abaixo, depois clique F5 para iniciar o programa, não esqueça
de colocar a página acessando.aspx como SET AS START PAGE.
158
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
159
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
160
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
161
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
162
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
163
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
164
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Depois do banco de dados criado acima, agoro irei criar uma tabela para
inserir os registros. Para criar a mesma, clique com o botão direito em cima
do nome do banco de dados criado anteriormente, passe para a opção New,
depois escolha a outra opção Table. Estarei criando uma tabela de banco de
dados bem simples e rápida para depois fazer o código acessá-la, inserindo
os dados. Mais a frente estarei mostrando como fazer uma STORE
PROCEDURE, dentro de um banco de dados. Para que o mesmo fique com
mais rapidez e performace esatrei usando SP. Depois de ter escolhido as
opções acima, veja a figura abaixo e analise se está tudo se saindo bem.
165
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
166
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Estarei mostrando agora como fazer uma SP para inserir dados no banco. É
uma STORE PROCEDURE que recebe os dados enviados e insere no
banco de dados e na tabela de pacientes.
Continuando ainda no Enterprise Manager clique com o botão direito do
mouse na opção Stored Procedure e logo em seguida clique em outra opção
New Stored Procedure..... Dessa forma estarei criando uma nova desde o
início.
167
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Depois que fiz os passos acima, a ferramenta mostra uma outra tela para
inserir os dados. STORE PROCEDURE usa uma linguagem chamada
PLSQL, com isso insira o código abaixo:
@NOME AS NVARCHAR(50),
@TELEFONE AS NVARCHAR(10),
@EMAIL AS NVARCHAR(100)
AS
168
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
GO
169
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
170
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Na figura abaixo, estou criando apenas a pasta, não esqueça que depois de
criar a pasta, devo criar uma classe dentro dela.
171
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
172
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
A opção que irei escolher é as CLASS, no caso essa classe que irei criar é
apenas um componente onde irei instanciar de qualquer outro tipo de
componente, podendo assim acessar os métodos do mesmo instanciado.
Coloque o nome da classe de clsBanco.cs e clique OPEN.
173
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Terei que criar uma string para conexão do banco de dados, onde tenho que
indicar senha, usuário, servidor e banco de dados. No meu caso também
estou utilizando um POOL máximo e mínimo de conexões. Veja a linha de
código abaixo:
174
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Explicando código:
Primeiro, estou criando a variável sConexao como pública pelo fato de que
outras classe irão ter que acessa essa variável. Veja que o tipo dela é
SqlConnection, com isso ela é do tipo de conexão do método importado
acima, chamado SqlClient. O catalog está recebendo um parâmetro
chamado BD_Mobile, esse nome significa o mesmo nome do banco de
dados que gostaria de conectar. Logo depois estou colocando um user id
que recebe outro parâmetro chamado sa, esse valor passado é o usuário do
meu banco de dados; não esqueça que o talvez o usuário do seu banco de
dados seja diferente do meu usuário, com isso favor colocar o usuário que
irá conectar ao seu banco.
175
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
176
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// metodo que conecta no banco de dados
/// abre o banco
/// </summary>
public void conectar()
{
if (sConexao.State==0)
{
sConexao.Open();
}
else
177
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
{
sConexao.Close();
}
}Explicando código acima:
Agora irei mostrar um outro método para fechar o banco de dados, com a
sua aplicação. Nesse método é apenas para essa funcionalidade citada
acima mesmo. Irei mostrar o código da mesma abaixo:
/// <summary>
/// metodo que desconecta do banco de dados
/// fecha o banco de dados
/// </summary>
public void desconectar()
{
if (sConexao.State!=0)
{
178
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
sConexao.Close();
}
}
using System;
using System.Data.SqlClient; //importando classe para ser usada
namespace PrimeiroWebService.componentes
{
/// <summary>
/// Classe de acesso a banco de dados
/// </summary>
public class clsBanco
{
public SqlConnection sConexao = new
SqlConnection("Initial Catalog=BD_Mobile; user id=sa ;password=; Data
Source=bsb066666; Max Pool Size=80; Min Pool Size=5");
/// <summary>
/// metodo que conecta no banco de dados
/// abre o banco
/// </summary>
public void conectar()
{
179
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (sConexao.State==0)
{
sConexao.Open();
}
else
{
sConexao.Close();
}
}
/// <summary>
/// metodo que desconecta do banco de dados
/// fecha o banco de dados
/// </summary>
public void desconectar()
{
if (sConexao.State!=0)
{
sConexao.Close();
}
}
}
}
180
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Agora irei fazer um classe que possuirá um método para inserir no banco de
dados os dados passados. Esse método criado usará a STORE
PROCEDURE criada anteriormente para inserir os dados no banco de
dados.
Da mesma forma que criei uma classe para conexão dentro da pasta
componentes, crie uma outra classe chamada clsInsere.cs. O nome do
método criado será insereDados.
Na própria classe estou instanciando a outra classe de conexão, abrindo a
conexão com o banco de dados, gerando a string de inserir os dados no
banco de dados e executando a mesma. Veja o código abaixo:
return true;
}
catch(SqlException e)
{
181
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja que criei um método público e que retornará um tipo Boolean, ou seja
true ou false. O nome do método é insereDados, não posso esquecer de
comentar dos parâmetros que estão sendo passados. No caso de nome,
telefone e email, significa que quando eu for chamar esse método tenho que
passar os seguintes valores, se eu não passar os valores o código dará erro.
Explicando o código:
try
{
///abrindo o banco de dados
182
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
sBanco.conectar();
string sql = "SP_INSERE_PACIENTES '" + nome + "', '" + telefone + "', '"
+ email + "'";
SqlCommand sqlc = new SqlCommand(sql,sBanco.sConexao);
sqlc.ExecuteNonQuery();
return true;
183
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
catch(SqlException e)
{
//jogando o erro para cima
throw new SystemException("erro na classe insere dados
(insereDados): "+ e.StackTrace);
}
Para entrar dentro do laço catch, é necessário que ocorra algum tipo de erro
dentro do laço try, quando ocorrer esse tipo de erro o código passará
automaticamente para dentro do catch, com isso o mesmo tratará o erro. O
código throw new SystemException trata o erro e lança para o método
acima, isto é, o erro irá ser lançado para o método que chamou. Estou
colocando uma mensagem mostrando o nome do classe e depois coloco
qual o foi o tipo de erro com o código e.StackTrace.
finally
{
//desconectando o banco de dados
sBanco.desconectar();
}
Esse laço finally significa que mesmo que o código der certo ou ocorrer
algum erro, passará pelo finally. Dentro desse laço eu sempre coloco para
desconectar o banco de dados. Estou usando a variável que criei e chamado
o método desconectar(), que também criei dentro da classe clsBanco.cs.
184
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
185
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Explicando o código:
186
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
187
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
188
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
189
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
190
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
191
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Agora irei clicar no botao de invoke para inserir os dados que digite no
banco de dados. Depois de clicado, veja o que o WebService retornou um
XML com um resultado true dentro da tag, estou mostrando na figura:
192
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
193
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Irei fazer um serviço para Web simples e prático. No último serviço criado
no capítulo anterior retorna um tipo Boolean, ou seja true ou false, agora
estarei criando um WebService que retornará um tipo string, ou seja nome e
data.
O nome do método será retornaOla com um parâmetro de entrada do tipo
string chamado nome, ficará do jeito a seguir retornaOla(string nome).
194
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodo simples e responsável para retornar um olá com o
/// nome colocado pelo usuário com a data atual
/// </summary>
/// <param name="nome">nome do usuario</param>
/// <returns>string</returns>
[WebMethod(Description="WebServices simple e responsável para
retornar um olá com o nome colocado pelo usuário junto com a data
atual.")]
public string retornaOla(string nome)
{
return "Olá " + nome + " hoje é: " +
DateTime.Today.Date.ToString("dd/MM/yyyy");
}
195
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
196
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja que agora o serviço da web terá três links, um chamado insereDados,
outro Testando e por último retornaOla, todos esses métodos retornará um
XML de resposta, não esqueça de que cadas serviço da web possui um
comentário abaixo.
Clique no link retornaOla.
Na a figura abaixo, terá um campo nome para ser preenchido, irei colocar
um nome e clicar no botão invoke.
197
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
198
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Consumindo WebServices
Até agora criei e testei apenas serviços da web, junto fiz apenas um
programa para consumir webservice, portanto irei mostrar como usar esses
webservices que criamos via outro sistema. Estarei fazendo um outro
sistema para acessar e ler os resultados, mostrando na tela o retorno do
XML. Não é dificil, estarei consumindo um serviço da web em apenas três
ou quatro linhas apenas, no máximo.
Para utilizar o WebService chamado insereDados, estarei criando uma
página ASPX e instanciando o objeto ASMX passando os parâmetros
necessários, todas as classes encarregarão de fazer todo o trâmite de dados,
inserindo os dados no banco de dados.
Não esqueça que os dados são passados de classe a classe até chegar ao
banco de dados normalmente, junto a STORE PROCEDURE terminando
dentro de uma tabela de banco de dados.
199
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Essa nova tecnologia que está ainda alcançando o mercado não se difcundiu
totalmente, portanto temos muitas possibilidades de criar serviços e
começar a comercializar.
Estarei criando uma nova classe ASPX chamada insereDados.aspx dentro
do mesmo projeto do Visual Studio.NET.
Segue os atributos abaixo da página:
TextBox’s
ID = txtNome
ID = txtTelefone
ID = txtEmail
Label’s
ID = Label1
Text = Nome:
ID = Label2
Text = Telefone:
ID = Label3
Text = E-mail:
ID = lblResultado
Text = “”
Button
ID = cmdEnviar
Text = Enviar
A figura da página abaixo será melhor para o entendimento de todos os
componentes acima criados.
200
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
201
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
A figura abaixo mostra qual o endereço tive que colocar para achar os
serviços criados nos capítulos anteriores. O endereço digitado foi o
seguinte: http://localhost/primeirowebservice/servico.asmx
Depois de digitado o endereço clique no botão para adicionar.
202
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (bRetorno)
{
lblResultado.Text = "Dados inserido com sucesso !!";
}
else
{
lblResultado.Text = "Erro ao inserir dados !!";
203
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
}
}
Explicando código:
Primeiramente, esse código irá ser executado quando clicar no botão
Enviar, logo após veja que estou instanciando o serviço que criei. Coloquei
o nome variável de sServico, estarei utilizando a mesma logo abaixo.
if (bRetorno)
{
lblResultado.Text = "Dados inserido com sucesso !!";
}
else
{
lblResultado.Text = "Erro ao inserir dados !!";
}
}
No código acima, estou apenas pegando a variável bRetorno que criei e
perguntando: Se o bRetorno for igual a true, mostra no label de resultado a
seguinte mensagem “Dados inserido com sucesso !!”, senão, ou seja, se for
false mostra a mensagem “Erro ao inserir dados !!” para o usuário final.
Perceba que o quem irá fazer todo o trâmite de dados, inserir dados no
banco de dados, usar conexão com o banco de dados, usar STORE
PROCEDURE e tudo mais é o serviço WebService e não a página ou
sistema que criamos chamada insereDados.aspx.
Executando o código criado anteriormente
Coloquei a página insereDados.aspx como página de inicialização do
projeto, veja na figura abaixo como fazer isto.
205
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
206
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
207
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Na figura abaixo mostro apenas que não existem dados na tabela Pacientes.
208
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Continuando com o nosso sistema, agora sim vou inserir os dados nos
campos para gravar no banco de dados através do WebService.
Inseri alguns dados básicos mesmo, apenas para verificar se tudo foi
inserido mesmo no banco.
209
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
210
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja que Não foi tão difícil fazer um WebService (serviço da web) que
insere os dados no banco de dados SQL SERVER.
Esse exemplo de serviço da Web foi simples, porém foi usado tudo de
necessário para criar e usar o mesmo serviço. Com esse exemplo, você terá
uma base boa para criar qualquer outro tipo de serviço da Web com
tremenda facilidade e rapidez.
211
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Qualquer que seja a situação, devemos ter um mente que se a chave foi
gerada a partir de um segredo ou senha, ela estará fatalmente comprometida
caso tal segredo seja revelado, já que o agente do ataque pode simplismente
gerar novamente a chave. Se for gerada a partir de número aleatório, temos
outro problema: as funções de geração de número são pseudoaleatórias. Na
maior parte das vezes esses números pseudoaleatórios são baseados na data
212
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
No caso de uso do banco de dados, deve-se cuidar para que a chave não só
fique protegida no armazenamento, mas também durante seu uso para
criptografia e descriptografia.
214
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
215
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
216
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Agora estarei criando uma classe de criptografia, cujo, a mesma terá dois
métodos; um que criptografa dados e outro que descriptografa dados.
Criarei um serviço da web (WebService) que acessará essa classe de
criptografia passando os parâmetros e o mesmo retornará uma string
criptografada.
Não é muito difícil fazer esse WebService que criptografa dados, porém
irei começar a fazer pela classe de criptografia de dados.
Começando, crie uma classe dentro da pasta componentes chamada
clsCriptografia.cs. Como disse acima, essa classe terá dois métodos
chamados encryptografa e decryptografa.
217
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// metodo que encriptografa os dados de acordo com a minha variavel
/// acima e os valores passos
/// ex.: encryptografa("valor")
/// </summary>
/// <param name="strValor"></param>
/// <returns>string</returns>
public string encryptografa(string strValor)
{
try
{
DESCryptoServiceProvider des = new
DESCryptoServiceProvider();
Byte[] inputByteArray =
System.Text.Encoding.UTF8.GetBytes(strValor);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, IV),
CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
218
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
return Convert.ToBase64String(ms.ToArray());
}
catch (System.Exception ex)
{
return ex.Message;
}
}
No próximo método da classe de criptografia chamará decryptografa
passando um valor criptografado.
A única coisa que o método faz é o seguinte:
- pega o valor criptografado passado;
- verifica a chave fixa;
- converte o valor passado;
- retorna para o método que chamou o valor descriptografado.
Veja o método abaixo:
/// <summary>
/// metodo que descriptografa os dados de acordo com os valores passos
/// e as variaveis acima
/// ex.: decryptografa("valor_criptografado")
/// </summary>
/// <param name="strValor"></param>
/// <returns>string</returns>
public string decryptografa(string strValor)
{
Byte[] inputByteArray = new byte[strValor.Length];
try
{
DESCryptoServiceProvider des = new
DESCryptoServiceProvider();
inputByteArray = Convert.FromBase64String(strValor);
System.IO.MemoryStream ms = new
System.IO.MemoryStream();
219
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
using System;
using System.Security.Cryptography;
namespace PrimeiroWebService.componentes
{
/// <summary>
/// Summary description for clsCriptografia.
/// </summary>
public class clsCriptografia
{
220
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// metodo que encriptografa os dados de acordo com a minha variavel
/// acima e os valores passos
/// ex.: encryptografa("valor")
/// </summary>
/// <param name="strValor"></param>
/// <returns>string</returns>
public string encryptografa(string strValor)
{
try
{
DESCryptoServiceProvider des = new
DESCryptoServiceProvider();
Byte[] inputByteArray =
System.Text.Encoding.UTF8.GetBytes(strValor);
System.IO.MemoryStream ms = new
System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms,
des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0,
inputByteArray.Length);
cs.FlushFinalBlock();
return
Convert.ToBase64String(ms.ToArray());
}
catch (System.Exception ex)
{
return ex.Message;
}
}
/// <summary>
221
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
223
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// Metodo que criptografa dados
/// </summary>
/// <param name="valorDescriptografado">string</param>
224
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <returns>string</returns>
[WebMethod(Description="WebService que criptografa dados")]
public string encrypt(string valorDescriptografado)
{
PrimeiroWebService.componentes.clsCriptografia
sCript = new PrimeiroWebService.componentes.clsCriptografia();
return sCript.encryptografa(valorDescriptografado);
}
Explicando o código:
O método acima é bem simples e fácil de entender.
Primeiramente estou colocando para o mesmo receber um parâmetro
chamado valorDescriptografado, esse valor é o mesmo digitado ou passado
para o serviço da web.
Na linha abaixo, estou apenas instanciando a classe de criptografia de
dados, junto dessa instância, criei uma variável chamada sCript. Essa
variável que estarei usando para chamar o método encrytografa.
Na próxima linha, estou colocando a minha variável e chamando o método
passando o parâmetro que veio (valorDescriptografado). O return significa
que o mesmo retornará um XML para o programa que o chamou passando
o resultado da string. No começo do método, veja que está retornando
apenas uma String; public string.
Foi bem simples e fácil.
Passando para o método, não esqueça de que esse próximo método é para
descriptografar dados passados.
O mesmo não é tão diferente do anterior, porém usa outro método dentro da
classe de criptografia. Poderia estar fazendo até o mesmo WebService,
porém quis dividir para ficar mais fácil o entendimento.
/// <summary>
/// Metodo que descriptografa dados criptografados
/// </summary>
/// <param name="valorCriptografado">string</param>
/// <returns>string</returns>
225
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Viu que não foi tão difícil assim fazer um webservice que criptografa e
descriptografa dados, esse serviço pode ser usando por você na hora que
quiser, ou mesmo se colocar na internet pode ser usado para ajudar as
pessoas para criptografar dados. Essa é uma das poucas idéias que podem
ser criadas.
Executando Código Criado Anteriormente
226
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
http://www.ascompras.com.br/webserviceCript/Servico.asmx
Primeiramente coloque a classe Servico.asmx como página principal do
projeto, cujo o mesmo inicializará quando clicar F5 no projeto do Visual
Studio.NET.
228
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Depois de visto o sistema de como irá ficar, irei digitar um nome ou frase
qualquer, clicando logo em seguida no botão Invoke. Depois disso o
sistema mandará o valor e retornará um XML mostrando um valor
criptografado.
Não esqueça de copiar esse mesmo valor e usar o outro método para
descriptografar; veja o passo a passo abaixo que dará tudo certo.
Estou mostrando na figura abaixo o valor que estarei colocando:
229
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
230
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
231
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
232
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Nessa próxima figura abaixo, estou mostrando que colei o código que tinha
copiado e irei clicar no botão para descriptografar os dados.
Concorda comigo que, o mesmo deve trazer a frase que criptografei ?
233
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
234
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
235
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Mobilidade
O software Windows Móbile foi criado para ser facilmente adaptado a uma
grande variedade de dispositivos de hardware de diversos fabricantes,
operadores móveis e integradores. Para criar uma plataforma com um
conjunto consistente de recursos para uso pelos desenvolvedores, a
plataforma Windows Móbile fornece duas plataformas definidas: o Pocket
PC e o Smartphone baseados no Winodws Móbile. Nessas categorias, a
plataforma Windows Móbile permite a personalização por OEMs e
operadoras, os quais criam dispositivos exclusivos e atraentes para o
mercado. A meta na Microsoft é garantir uma base de conhecimento
consistente para os desenvolvedores de todos esses dispositivos, para que
os aplicativos construídos em um dispositivo e uma plataforma (Pocket PC
236
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Interface
Arquivos
237
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
238
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
arquivos sob a chave HKCR. A Samsung liberou um patch para expor essa
chave.
Problemas do dispositivo
239
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Segurança
240
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Hardware
241
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Por exemplo:
“arquivo://\\Meus documentos\\logo.bmp” será transferido em seu estado
atual, se qualquer modificação, para o manipulado WM_NOTIFY.
242
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
243
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
244
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Funcionalidade do Sistema:
Instalando o MYSQL
245
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-2
246
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-3
247
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-4
248
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-5
249
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-6
Agora sim, todo sistema foi instalado com sucesso e sem erro na hora da
instalação. Clique no botão FINISH, para terminar e fechar o setup. Foi
bem rápido e pratico instalar o MYSQL.
250
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-7
Referência: 2-8
Na figura 2-9, mostra apenas a versão do gerenciador e informações do
software.
Referência: 2-9
252
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-10
A figura 2-11 mostra apenas o local onde irão ser instalados todos os
arquivos, pode ser mudado tranquilamente o diretório e não ocorrerá
nenhum problema em relação ao funcionamento do software. Existem
softwares que funciona apenas instalando no diretório default, nesse caso se
for mudado funcionará corretamente todo software.
253
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-11
Referência: 2-12
254
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-13
255
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-14
A figura 2-15 mostra mais informações sobre todo o sistema. Por favor, leia
toda informação.
256
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-15
Referência: 2-16
257
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Clique no ícone que foi criado na sua tela. O sistema abrirá o software e
pedirá um usuário, senha e servidor. Use o servidor localhost, usuário root e
senha em branco mesmo, dessa forma estará logando no servidor local de
banco de dados MySQL. Veja a figura 2-17.
Referência: 2-17
Praticando
258
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência 2-18
Essa tabela criada é para cadastrar os usuários. 2-18. Note que existem
campos e campos nessa tabela. Veja a especificação abaixo:
Tabela: TB_USUARIO_CELULAR
Campos:
ch_usu (int) – chave do usuário (cria automaticamente)
no_usu (varchar 255) – nome do usuário que cadastrar
email_usu (varchar 255) – e-mail do usuário cadastrado
dt_usu (date) – data que o usuário cadastrou para controle
pw_usu (varchar 255) – senha do usuário criptografada, na figura veja que
a mesma está criptografada.
259
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-19
Tabela: TB_FINANCAS
Campos:
ch_fin (int) – chave da tabela de finanças
tp_fin (int) – tipo de lançamento (1 – despesas, 2 – receita)
desc_fin (varchar 255) – descrição do lançamento
val_fin (decimal 10,0) – valor do lançamento
per_fin (varchar 255) – período de lançamento (ex.: 2005/04)
260
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Pronto, agora que o banco de dados foi criado junto com as suas respectivas
tabelas e campos, irei começar a programar.
Para lembra, estou usando o Visual Studio.NET 2003.
Referência: 2-20
261
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-21
262
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
escolhi para estudar profundo mesmo, a linguagem C#.NET, por isso todas
as apostilas ou projetos criados por mim, será em C#.NET.
Referência: 2-22
263
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-23
264
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-24
265
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-25
Configuração do form
Id = frmLogin
Title= Logar no Sistema
Font = Trebuchet MS
266
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
TextBox
Id = txtEmail
Label
Id = lblSenha
Text = Senha:
TextBox
Id = txtSenha
Password = True
Command
Id = cmdLogar
Text = Logar
Format = Link
Label
Id = lblResultado
ForeColor= Red
Text = (em branco)
Command
Id = lnkCadastro
Text = Novo Usuário ?
Format = Link
267
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-26
Clicando uma vez dentro do form, você pode escrever qualquer coisa
dentro. O texto Sistema de Gerenciamento Financeiro, foi colocado apenas
clicando uma vez e digitando normalmente. Depois de digitar clicar
ENTER para deixar um espaço legal.
Referência: 2-27
269
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-28
270
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-29
using System.Data.Odbc;
271
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Driver};Server=BSB066666;DataBase=bd_mobile;uid=root;pwd=;option=
3");
/// <summary>
/// Metodo que conecta no banco de dados
/// </summary>
public void conecta()
{
try
{
if (sConn.State==0)
{
sConn.Open();
}
else
{
sConn.Close();
}
}
catch(Exception e)
{
throw new Exception("Banco fora do ar:"+
e.StackTrace.ToString());
}
}
/// <summary>
/// Metodo que desconecta no banco de dados
/// </summary>
public void desconecta()
{
try
{
272
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (sConn.State!=0)
{
sConn.Close();
}
else
{
sConn.Close();
}
}
catch(Exception e)
{
throw new Exception("Banco fora do ar :"+ e.StackTrace);
}
}
Não posso deixar de explicar que essa classe é apenas para acesso ao banco
de dados. Irei analisar linha por linha.
Essa linha de código using System.Data.Odbc; é apenas para importar a
classe de driver para a comunicação. No meu caso estou usando MYSQL
por isso estou usando a classe de ODBC, quando estiver usando outro
banco como o SQL SERVER, estarei usando outra classe para
comunicação.
273
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Voltando a algumas páginas atrás, veja que é um método que não retorna
valor, e também não recebe valor algum. É um método público e simples.
Perceba que o mesmo está dentro de um laço de try e catch, o que significa
isso? Significa que, se ocorrer algum erro na hora de abrir a conexão com o
banco de dados, o mesmo irá para o laço catch, mostrando assim o tipo de
erro e a descrição do erro calçado.
if (sConn.State==0)
{
sConn.Open();
}
274
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
que irei usar é Open() para abrir o banco de dados. Viu que é bem simples
esse método?
catch(Exception e)
{
throw new Exception("Banco fora do ar :"+ e.StackTrace);
}
275
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
276
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-30
277
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-31
Veja que na figura 2-31 possui apenas os campos Nome, E-mail e Senha.
Veja abaixo os objetos de tela, estarei detalhando cada um.
Primeiramente, clique no form da barra de ferramentas toolbox e arraste
para a tela. Como já dito antes, todos os objetos de tela estão dentro da
barra de ferramentas.
Label
Id = lblNome
Text = Nome
TextBox
Id = txtNomeCadastro
278
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Label
Id = lblEmailUsuarioCadastro
Text = E-mail:
TextBox
Id = txtEmailCadastro
Label
Id = lblSenhaUsuarioCadastro
Text = Senha:
TextBox
Id = txtSenhaCadastro
Text = (em branco)
Password = True
Command
Id = cmdCadastrar
Text = Cadastrar
Format = Link
Label
Id = lblResultadoCadastro
ForeColor = Red
Command
Id = lnkLogar
Text = Logar no Sistema
Format = link
Todos os objetos de tela foram citados acima. O título que coloquei foi
apenas clicando uma vez dentro do form e digitando o texto normalmente.
279
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Depois de fazer o form para cadastrar usuário, irei agora criar duas classes,
uma para criptografia de dados e outra para inserir o usuário cadastrado no
banco de dados. Estarei criando essa classe de criptografia para inserir a
senha do usuário criptografada. Nessa classe de criptografia terá apenas
dois métodos.
Criei da mesma forma a classe dentro da pasta de criptografia chamada
Criptografia.cs.
Abra a classe e use o importe abaixo:
using System.Security.Cryptography;
/// <summary>
/// metodo que encriptografa os dados de acordo com a minha variavel
/// acima e os valores passos
/// ex.: encrypt("valor")
/// </summary>
/// <param name="strValor"></param>
/// <returns>string</returns>
public string encrypt(string strValor)
{
try
{
280
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// <summary>
/// metodo que descriptografa os dados de acordo com os valores passos
/// e as variaveis acima
/// ex.: decrypt("valor_criptografado")
/// </summary>
/// <param name="strValor"></param>
/// <returns>string</returns>
public string decrypt(string strValor)
{
Byte[] inputByteArray = new byte[strValor.Length];
try
{
DESCryptoServiceProvider des = new
DESCryptoServiceProvider();
281
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
inputByteArray = Convert.FromBase64String(strValor);
System.IO.MemoryStream ms = new
System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms,
des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
return encoding.GetString(ms.ToArray());
}
catch (System.Exception ex)
{
return ex.Message;
}
}
Antes de tudo, é colocada uma chave e será sempre usada para criptografar
os dados. Essa key é usada nos dois métodos. O nome que dei para
criptografar é dot89000.
O primeiro método chamado encrypt é passado um valor do tipo string e o
mesmo retornam um valor do tipo string, porém criptografada. Existe um
exemplo em total funcionamento na internet, segue o site:
www.aspneti.com.br, lá terá um link para o sistema que criptografa dados.
O segundo método chamado decrypt é usado toda vez que desejo
descriptografar qualquer dado que está criptografado no banco de dados. O
mesmo só deve ser usado se o método de criptografar dados tiver sido
usado primeiramente. O método para descriptografar dados é um método
do tipo público, que necessita de ser enviado um parâmetro do tipo string e
retorna outro parâmetro do tipo string. Na figura 2-32 mostra como ficará a
classe que acabamos de fazer.
282
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-32
Estarei usando esta classe, na hora que for inserir um usuário no banco de
dados.
O próximo passo será criar uma classe para cadastrar o usuário e senha.
Essa chamará Login. Criei a mesma dentro da pasta padrão que defini
chamada componentes com nome Login.cs.
Depois de criado, primeiramente importei a classe para conectar o driver
com o banco de dados.
using System.Data.Odbc;
283
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Esse importe estarei sempre usando quando a classe for comunicar com o
banco de dados. Logo depois, preciso usar as classes que criei
anteriormente. Estarei instanciando a classe de Banco e de Criptografia.
Veja abaixo como:
Antes de criar método, instanciei as duas classes, criando uma variável para
cada uma das instâncias.
O método que irei criado agora é para cadastrar um usuário, por exemplo,
esse método terá três parâmetros de entrada como nome, senha e senha.
Será um método do tipo público e retornará um objeto do tipo Boolean.
Segue o código abaixo:
/// <summary>
/// Metodo para cadastrar o usuario no sistema
/// </summary>
/// <param name="nome">nome</param>
/// <param name="email">email</param>
/// <param name="senha">senha</param>
/// <returns>Boolean</returns>
public Boolean cadastraUsuario(string nome, string email, string senha)
{
try
{
///criptografando senha para gravar no banco de dados
senha = sCript.encrypt(senha);
return true;
}
catch(Exception e)
{
///se ocorrer algum erro, encapsula e mostra o mesmo na classe de
cima
throw new Exception("erro na classe login :" +
e.StackTrace);
}
finally
{
///terminando a transacao, desconecta do banco de dados
sBanco.desconecta();
}
}
Explicando o método cadastraUsuário.
try
{
///criptografando senha para gravar no banco de dados
senha = sCript.encrypt(senha);
sql += " ('" + nome + "', '" + email + "', '" + senha + "', '" +
DateTime.Now.ToString("yyyy-MM-dd") + "')";
Nas linhas de código acima, estou criando um SQL para inserir no banco de
dados. A tabela do banco que irei criar é a tabela de usuários chamada
tb_usuario_celular, colocando os nomes dos campos que existem na tabela,
passarei os valores que foram passados anteriormente. Veja que existe um
286
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
campo que não estou passando como parâmetro, mas estou inserindo o
mesmo no banco de dados, chamado dt_usu. Como valor, estou pegando a
data do sistema, ou seja, do servidor que está a aplicação.
return true;
catch(Exception e)
{
///se ocorrer algum erro, encapsula e mostra o mesmo na classe de cima
throw new Exception("erro na classe login :" + e.StackTrace);
}
finally
{
///terminando a transacao, desconecta do banco de dados
sBanco.desconecta();
}
287
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-33
Referência: 2-34
289
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-35
290
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-36
291
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 2-37
292
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Antes de tudo, para verificar se o usuário e senha são válidos, deve-se fazer
um select no banco de dados, dentro da tabela chamada tb_usuario_celular.
O método ser do tipo público, retornará um objeto DataSet e passará dois
tipos de parâmetros string.
293
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
///gera o dataset
DataSet dtSet = new DataSet();
///preenche o dataset
dtAdapter.Fill(dtSet);
///retorna o dataset
return dtSet;
}
catch(Exception e)
{
///se ocorrer algum erro, encapsula e mostra o
mesmo na classe de cima
throw new Exception("erro na classe login :"
+ e.StackTrace);
}
finally
{
///terminando a transacao, desconecta do
banco de dados
sBanco.desconecta();
}
}
294
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
ObjetoDataAdapter.Fill(Passando o DataSet);
A forma que estou fazendo no meu é o seguinte:
dtAdapter.Fill(dtSet);
Depois do DataSet preenchido posso retorná-lo com da seguinte forma:
return dtSet;
295
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Não esqueça que é um objeto que está sendo retornada. Nele, existem
dados para preencher outro objeto de tela.
Depois da classe criada, estarei desenvolvendo a camada de apresentação,
ou seja, o form do projeto.
Dentro da mesma página default.aspx, estarei criando um outro form para
logar. Clique na barra de ferramentas e arraste para a página falada acima
com as seguintes características: Estarei colocando os objetos em ordem
que está a página, ou seja, coloque os componentes na ordem que estou
descrevendo.
Form
Id = frmLogin
Title= Logar no Sistema
Componentes do form:
Label
Id = lblEmail
Text = E-mail:
TextBox
Id= txtEmail
Label
Id = lblSenha
Text = Senha:
TextBox
Id=txtSenha
Password = True
Command
Id= cmdLogar
Text = Logar
296
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Format = Link
Label
Id= lblResultado
ForeColor: red
Command
Id = lbkCadastro
Text = Novo Usuário ?
Format = Link
Referência: 2-38
297
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (dtSetLogin != null)
{
if (dtSetLogin.Tables[0].Rows.Count >0)
{
Session["NomeUsuario"] =
dtSetLogin.Tables[0].Rows[0][1].ToString();
Session["ChaveUsuario"] =
dtSetLogin.Tables[0].Rows[0][0].ToString();
Session["EmailUsuario"] =
dtSetLogin.Tables[0].Rows[0][2].ToString();
limpaCampos();
ActiveForm = frmMenu;
}
else
{
lblResultado.Text = "Email ou Senha
estão inválidos!";
}
}
else
298
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
{
lblResultado.Text = "Email ou Senha estão
inválidos!";
}
}
Explicando o Código para Logar
299
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (dtSetLogin != null)
{
if (dtSetLogin.Tables[0].Rows.Count >0)
}
Nome do usuario
Session["NomeUsuario"] = dtSetLogin.Tables[0].Rows[0][1].ToString();
Chave do usuário
Session["ChaveUsuario"] = dtSetLogin.Tables[0].Rows[0][0].ToString();
E-mail do usuário
Session["EmailUsuario"] = dtSetLogin.Tables[0].Rows[0][2].ToString();
limpaCampos();
ActiveForm = frmMenu;
Referência: 2-39
1 – Sair do Sistema
2 – Cadastra Movimento
3 – Relatório Movimento
Esse form terá o visual bem simples e fácil, veja a especificação abaixo do
mesmo:
301
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Form
Id = frmMenu
Title = Menu do Sistema
Font = Trebuchet MS
List
Id = listMenu
Decoration = Numbered
Items
Value = 1
Item Text = Sair do Sistema
Value = 2
Item Text = Cadastrar Movimento
Valeu = 3
Item Text = Relatório Movimento
302
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-1
303
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
ActiveForm = frmRelatorio;
break;
}
}
Referência: 5-2
304
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Antes de começar a testar o sistema e o menu que foi criado, crie os forms
que criamos acima, porque senão o mesmo dará um erro falando que o
form não existe.
305
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-3
306
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-4
Cadastro de Despesas
307
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Label
Id = lblTpMovimento
Text = Tipo Movimento
SelectionList
Id = cmbTpMovimento
SelectType = Radio
Rows = 3
Label
Id = lblDescMovimento
Text = Descrição:
TextBox
Id = txtDescricaoMovimento
Size = 30
Label
Id = lblValMovimento
Text = Valor:
308
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
TextBox
Id = txtValMovimento
EnableViewState = false
Numeric = true
Label
Id = lblPerMovimento
Text = Período:
TextBox
Id = txtPerMovimento
Size = 20
Command
Id = cmdGravar
Format = link
Text = Gravar
Label
Id = lblResultadoMovimento
StyleReference = error
Font = normal
Command
Id = lnkVoltarCadastro
Text = voltar
Format = link
Veja a figura 5-5 que mostra como ficou o form criado acima.
309
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-5
310
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-6
311
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-7
312
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
return true;
}
catch(Exception e)
{
throw new Exception("erro na classe financas
"+ e.Message);
}
finally
{
sBanco.desconecta();
}
}
313
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Continuando a explicação, dentro do bloco try, coloquei tudo que pode dar
erro ou gerar um erro. Primeiramente chamo o método que abre o banco de
dados, depois crio uma string para inserção de valores dentro do banco de
dados. Para montar o sql, deve-se se entender um pouco da linha PLSQL.
Na linha abaixo do SQL, estou usando o ODBCCommand para executar o
próprio SQL, passando a variável de banco de dados sConn. Para executar
a instrução montada, coloco o nome de minha variável (ponto) o
ExecuteNowQuery(). Se ocorrer algum erro na aplicação ou na instrução, o
mesmo é redirecionado para o bloco catch. Se nenhum erro ocorrer, o
método retorna true para o método que o chamou com a linha de código
return true.
314
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
return true;
}
catch(Exception e)
{
throw new Exception("erro na classe financas "+ e.Message);
}
finally
{
sBanco.desconecta();
}
315
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (bFin)
{
lblResultadoMovimento.Text = "Movimento
cadastrado com Sucesso!";
limpaCampos();
}
else
{
lblResultadoMovimento.Text = "Erro ao
cadastrar movimento!";
}
}
316
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Veja que primeiramente que instanciei a classe de finanças que está dentro
de componentes. Depois criei uma variável chamada fin para poder chamar
todos os métodos disponíveis dentro da classe Finanças. Na linha abaixo,
crio uma variável do tipo Boolean chamada bFin, que recebe como
parâmetro a variável criada anteriormente fin. Clico (ponto) e aparecem
todos os métodos disponíveis para uso.
O método que criei foi o insereFinancas, tenho que passar todos os
parâmetros digitados e escolhidos pelo usuário, não esquecendo que a
sessão do usuário deve ser passada também. Veja o código abaixo:
Boolean bFin =
fin.insereFinancas(cmbTpMovimento.SelectedIndex.ToString(),
txtDescMovimento.Text, txtValMovimento.Text, txtPerMovimento.Text,
Session["ChaveUsuario"].ToString());
Lembre-se que, todos os parâmetros do método têm que ser passado. Todos
os parâmetros se relacionam com os campos esperados pelo método. O
último parâmetro chamado Session[“ChaveUsuario”].ToString() é a sessão
do usuário criada quando o mesmo loga no sistema. Preste atenção de como
pego o valor de um objeto de tela radio button. Depois que é executado a
linha acima, apenas verifico se a variável bFin voltou verdadeiro ou falso
para gerar a mensagem para o usuário. Atribuo a mensagem para o label
criado, veja o código.
if (bFin)
{
lblResultadoMovimento.Text = "Movimento
cadastrado com Sucesso!";
limpaCampos();
}
317
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
else
{
lblResultadoMovimento.Text = "Erro ao
cadastrar movimento!";
}
Referência: 5-8
318
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Compile o código e veja se está tudo certo com o código. Estando tudo
certo, testarei o sistema com o emulador MME da Microsoft. Para compilar
o código use o Visual Studio.NET, menu Build e submenu Build Solution,
ou se preferir use a tecla de atalho CTRL + SHIFT + B. Quando for testar,
não esqueça de iniciar o servidor de banco de dados MYSQL. Depois que
logar, veja a figura 5-9.
Referência: 5-9
319
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-10
320
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-11
321
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 5-12
322
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Depois de criar aos forms de login, cadastro e menu, agora irei criar um
form para gerar relatórios de acordo com o período ou descrição do
movimento. Tanto fazer se é receita ou despesa. Irei mostrar primeiramente
como é a tela, veja na figura 6-1.
Referência: 6-1
Form
Id = frmRelatorio
Title = Relatório do Sistema
Font = Trebuchet MS
323
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
TextBox
Id = txtDescricaoRel
TextBox
Id = txtPeriodoRel
TextView
Id = txtResultadoRel
Font = Trebuchet MS
Command
Id = cmdGerarRel
Text = Gerar Relatório
Format = Link
Command
Id = lnkVoltar
Text = voltar
Format = Link
324
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (descricao != "")
{
sql += " and tbf.desc_fin like '%" +
descricao + "%'";
}
if (periodo != "")
{
sql += " and tbf.per_fin = '" + periodo
+ "'";
}
325
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
return dtReader;
}
catch(Exception e)
{
throw new Exception("erro na classe financas
"+ e.Message);
}
}
326
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
A assinatura do método:
try
{
sBanco.conecta();
if (descricao != "")
{
sql += " and tbf.desc_fin like '%" +
descricao + "%'";
}
327
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (periodo != "")
{
sql += " and tbf.per_fin = '" + periodo
+ "'";
}
return dtReader;
}
if (descricao != "")
{
sql += " and tbf.desc_fin like '%" + descricao + "%'";
}
if (periodo != "")
{
sql += " and tbf.per_fin = '" + periodo + "'";
}
Bloco catch:
catch(Exception e)
{
throw new Exception("erro na classe financas "+ e.Message);
}
329
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (dtReader.Read())
{
do
{
txtResultadoRel.Text +=
"<b>Descrição:</b>" + dtReader["desc_fin"].ToString();
txtResultadoRel.Text += " <br>
<b>Tipo:</b>" + dtReader["tp_fin"].ToString();
txtResultadoRel.Text += " <br>
<b>Valor:</b>" + dtReader["val_fin"].ToString();
txtResultadoRel.Text += " <br>
<b>Período:</b>" + dtReader["per_fin"].ToString();
txtResultadoRel.Text += " <br><br>";
if (dtReader["tp_fin"].ToString() ==
"1")
{
330
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
valor +=
Convert.ToDouble(dtReader["val_fin"]);
}
else if (dtReader["tp_fin"].ToString()
== "2")
{
valor -=
Convert.ToDouble(dtReader["val_fin"]);
}
}
while (dtReader.Read());
MobileCelular.componentes.AcessoBanco
sBanco = new MobileCelular.componentes.AcessoBanco();
dtReader.Close();
sBanco.desconecta();
}
else
{
txtResultadoRel.Text = "Nenhum movimento
encontrado !";
}
331
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 6-2
332
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 6-3
Bem, o sistema móbile para web, cujo pode ser acessado de qualquer
dispositivo móvel está pronto. Os próximos capítulos, ensinarei como
desenvolver um aplicativo móvel localmente, ou seja, para um celular. O
sistema não poderá ser acessado por qualquer dispositivo via internet. Esse
tipo de aplicativo é chamado de “aplicativo windows form”.
333
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
http://www.microsoft.com/downloads/details.aspx?FamilyID=b9b12312-
fe57-4817-a4bc-69992802732d&DisplayLang=en
334
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-1
Form1.cs
Form
Name = Form1
Text = Cadastro
Label
Name = label1
Text = Cadastro
TextBox
335
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Name = txtUsuario
Label
Name = label2
Text = E-mail:
TextBox
Name = txtEmail
Button
Text = Cadastrar
Name = cmdCadastrar
Label
Name = lblResultado
ForeColor = Red
336
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-2
337
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-3
Agora em diante irei criar uma classe para conexão com o banco de dados
SQL Server CE. Adicione uma classe chamada Banco.cs em seu projeto. A
mesma não está dentro de nenhuma pasta.
Criei dois métodos dentro da mesma, um chamado conectar() e outro
chamado desconectar().
338
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
339
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-4
using System;
using System.Drawing;
using System.Data;
using System.Data.Common;
using System.Data.SqlServerCe;
using System.IO;
namespace Sistema
{
/// <summary>
/// Classe que conecta no banco de dados
340
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
/// </summary>
public class Banco
{
/// String de conexão do banco
public SqlCeConnection sConn = new
SqlCeConnection(@"Data Source=\My Documents\BD_Usuario.sdf");
341
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Dica C#.NET:
Para quem está usando C#.NET para desenvolver a aplicação, não esqueça
de usar o @ antes do Data Source da string de conexão. Sem usar o mesmo,
a string dará um erro. A mesma pode ser vista no fórum do site
www.aspneti.com.br/forum.
Criei uma classe chamada Insere.cs dentro de meu projeto. Ela será
responsável para inserir os valores digitados pelo cliente no banco de dados
do dispositivo móvel. Nesta classe, irei instanciar a classe Banco.cs criada
anteriormente. Na Insere.cs terás apenas um método chamado
cadastraUsuario(string usuario,string email).
342
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-5
using System;
using System.Data.SqlServerCe;
using System.Data;
namespace Sistema
{
/// <summary>
/// Classe que insere valores no banco de dados
/// </summary>
public class Insere
{
Banco sBanco = new Banco();
343
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
return true;
}
catch(Exception e)
{
throw new Exception("erro na insercao" +
e.Message);
//return false;
}
finally
{
sBanco.desconectar();
}
}
}
}
Colocando a linha acima dessa forma, deixo disponível para uso dentro de
toda classe a minha variável sBanco.
Estou usando os blocos para tratamento de erro try, catch e finally.
Dentro do bloco try estou colocando toda a operação do sistema, abrindo o
banco de dados para depois inserir.
try
{
sBanco.conectar();
return true;
}
345
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
catch(Exception e)
{
throw new Exception("erro na insercao" + e.Message);
//return false;
}
finally
{
sBanco.desconectar();
}
346
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Até agora, o que fizemos foi apenas criar classes no aplicativo para abrir o
banco de dados e outro para inserir dados. Não foi mexido na classe ou
formulário Form1.cs para enviar os valores para as mesmas. Estarei inserir
agora mesmo, logo abaixo.
if (bi)
{
lblResultado.Text = "Cadastrado com sucesso";
}
else
{
lblResultado.Text = "Erro ao cadastrar";
}
}
347
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
if (bi)
{
lblResultado.Text = "Cadastrado com sucesso";
}
else
{
lblResultado.Text = "Erro ao cadastrar";
}
348
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Antes de tudo no capítulo acima, foi colocado um link para baixar o SQL
Server Ce para instalação no seu micro. Espero que tenha baixado e
instalado para que possa seguir neste capítulo da apostila.
Banco:
BD_Sistema
Tabela:
Tb_usuario
Campos:
Ch_usu (int)
No_usu (nvarchar 100)
Email_usu (nvarchar 50)
349
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-6
Depois do banco de dados criado dentro do pocket pc, veja que não existem
dados cadastrados dentro dele. Na próxima figura 7-7 mostra os dados
dentro do banco.
Para verificar se existe apenas faça um select normalmente:
Select * from tb_usuario
350
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-7
351
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-8
352
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-9
Não estranhe com tantas figuras nesta parte da apostila, mostro apenas o
passo a passo mesmo do que foi executado. Na próxima figura mostra que
o sistema foi executado com sucesso e enviou a mensagem para o usuário.
Figura 7-10.
353
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-10
354
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-11
355
Este material não pode ser usado
em treinamentos e em Sala de Aula
Curso Prático de Visual Studio.NET
Referência: 7-12
356
Este material não pode ser usado
em treinamentos e em Sala de Aula