- ecode10.com

Transcrição

- ecode10.com
magazine
10
ecode
EDIÇÃO
#06 - 2012
www.ecode10.com
ecode10
magazine
MVC Microsoft
e mais
< índice >
Criando gráfico de barras usando
API do google
Pagamento Móvel
Segurança da informação
Download de PDF usando Buffer
Seleciona o valor da combo
Estudar inglês
< índice >
MVC e Entity Framework Parte 1
MVC e Entity Framework Parte 2
MVC e Entity Framework Parte 3
MVC e Entity Framework Parte 4
MVC e Entity Framework Parte 5
A Revista
A ecode10 Magazine veio com o objetivo de
Editorial
ajudar você leitor com artigos de informática,
programação, notícias, promoções e vídeos
Seja patrocinador
especiais. Se você precisa aprender a programar,
Seja um patrocinador da nossa revista e promova o seu
negócio de forma simples, especial e com grande
oportunidade de retorno. Para ser um patrocinador, não
sempre precisa investir dinheiro, você pode investir o seu
tempo mandando artigos, mandando vídeos feitos,
divulgando o nosso trabalho no seu Twitter, mandando
e-mail e muito mais.
precisa de dicas importantes de segurança na
programação e não tem muito tempo para ficar
lendo livros de 500 ou 1000 páginas; então leia a
nossa revista.
A revista possui artigos técnicos e notícias, isso
porque somos feitos de programadores, isto é, a
revista é feita com ajuda dos programadores e
pessoas que gostam de informática.
A revista é grátis para download, basta ter
apenas cadastro nos sites www.ecode10.com ou
no www.aspneti.com. Se você quer nos ajudar
publicando artigo na revista, então escreva para
nós ou entre no site, vá ao menu fale conosco e
nos mande uma informação. Estamos também no
Twitter divulgando informações sorteando
promoções de vídeos, ebooks e artigos.
Se você quiser investir dinheiro, e colocar o seu negócio
dentro da revista enviada para mais de 8 mil pessoas
gratuitamente; basta colocar o valor de R$ 50,00
(cinquenta reais) para tal. O valor serve apenas para nos
ajudar a manter o site no ar e com segurança. Não temos
até o momento o objetivo de lucro como outras
existentes no mercado.
Vantagens de ser patrocinador
O nosso site possui mais de 9 mil pessoas cadastradas e
ativas, temos mais de 32.200 acessos diariamente em
nossos servidores, temos vídeos, podcasts, artigos,
revista, informativo diário, e-mail marketing, banners e
muito mais. Em todos estes meios, temos a possibilidade
de anunciar o seu negócio e manter a gerência de clique.
EDITOR: MAURICIO JUNIOR
Criando gráfico de colunas
com a API do Google
Olá pessoal, hoje eu vou dar con3nuação no ar3go anterior publicado por mim em dois sites, ecode10.com e imasters.com.br. O gráfico de hoje envolve colunas em vez de linhas, envolve a linguagem de programação C#, linguagem de interpretação JavaScript e Html. Esse número é somado usando o SELECT SUM ou o COUNT e retornado do banco de dados em forma de INT. Ferramentas u+lizadas
Visual Studio 2012
Linguagem de programação: C#
Tipo do projeto: ASP.NET
Depois de entender um pouco melhor sobre as APIs do Google, comecei a fazer gráficos de acompanhamento, gráficos financeiros e gráficos de acesso usando a API. Ela ajuda muito para quem não tem componente desenvolvido para gerar esse 3po de gráfico.
É necessário ter acesso a Web para que o gráfico seja mostrado de forma correta. Na verdade, todo Javascript está localizado no Google e a função escrita chama ele passando os parâmetros e no final gera o gráfico. Acabei seguindo a mesma solução do ar3go anterior, porque passando os valores de forma diferente o javascript do Google não funciona e não mostra o gráfico. Lembro que não entrou no mérito de conexão com o banco de dados, existem outros ar3gos no site www.ecode10.com que falam sobre isso de forma detalhada. O que fiz dessa vez foi retornar um número do banco de dados, na verdade dois números. HTML da página
No HTML da página é feito pouca coisa. Adicionei o script do Google. Listagem 1.
<script type="text/javascript" src="https://
www.google.com/jsapi"></script>
Listagem 1 – Script do Google
!
Depois adicionei um componente do C# e
ASP.NET chamado Literal. Listagem 2.
<asp:Literal id="ltlResultado"
runat="server" />
Listagem 2 – Componente Literal
!
Para finalizar com o HTML, adicionei
uma div responsável por gerar o gráfico e que
o Google pede. Listagem 3.
<div id="chart_div" style="width: 800px;
height: 500px;"></div>
Listagem 3 – Adicionando Div para gerar gráfico
Página ASPNET (.aspx).
Criei um método na página .aspx.cs chamado preencherDados(). Ele é responsável por buscar as informações no banco de dados e gerar o relatório. Para o usuário, ao entrar na página, o gráfico é mostrado e pra isso basta adicioná-­‐lo ao Page_Load. Listagem 4.
private void preencherDados()
{
</script>");
Abrir o programa apenas uma vez
StringBuilder str = new
StringBuilder();
ltlResultado.Text =
str.ToString().TrimEnd(',');
str.Append("<script type='text/
javascript'>");
}
str.Append("google.load(\"visualization\",
\"1\", { packages: [\"corechart\"] });");
A listagem 4 mostra no meio do método que os dados são buscados de alguma fonte, no meu caso, do banco de dados através de um método. A opção de Twieer e Site, são fixas, só os valores que são variáveis.
Listagem 4 – Criando método preencherDados().
str.Append("google.setOnLoadCallback(drawChart
);");
str.Append("function drawChart()
{");
str.Append("
var data = new
google.visualization.arrayToDataTable([");
str.Append(@"
'Cadastros'],
['Tipo',
['Twitter',
" + buscarValor(_dto) + "],");
str.Append(@"
['Site', " +
buscarQuantidade(_dto) + "] ");
str.Append(@"
]);
var options =
Na variável op3ons eu defini a cor do gráfico, #4C7951 (azul). No final, esse código é exibido na div chamda “chart_div”, aquela colocada no Html da página. A úl3ma linha do método pega todo o valor e atribui ao componente Literal do ASP.NET. Depois de atribuir ao Literal, o valor chama a div que chama o script do Google. Bem simples, e ao mesmo tempo engenhoso. Talvez essa não seja a melhor forma de fazer, mas foi a única forma que consegui fazer funcionar o gráfico com C#. Quem quiser dar opinião e mostrar uma outra maneira, fique livre para comentar.
O resultado final do nosso gráfico está na figura 1.
{
vAvis: {title:'Quantidade', titleTextStyle:
{color: 'green'}},
colors: ['#4C7951'],
series: {2: {type:'line'}}
};
var chart = new
google.visualization.ColumnChart(document.getE
lementById('chart_div'));
chart.draw(data,
options);
}
Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org. Download de PDF usando Buffer
BorderWidth="1px" runat="server" ImageUrl="capas/
Caro(a) Leitor(a), gostaria de falar hoje sobre capa-­‐201206.png" como fazer download de PDF usando buffer sem AlternateText="Magazine" ToolTip="Edição 05 -­‐ mostrar o caminho ao usuário final pelo browser. São Magazine" OnClick="imgEdicao06_Click"/>
poucas linhas que precisam ser escritas, só é necessário prestar atenção no funcionamento e na ideia.
Esse componente (Listagem 1) mostra a imagem no atributo ImageUrl e ao clicar na imagem, o Usado no ar+go:
Linguagem C#
Ferramenta de desenvolvimento Visual Studio 2012
Tipo da aplicação Web: ASP.NET.
evento acionado é o OnClick. Esse evento chama a classe de C# para fazer download. Caso queira fazer uma contagem de quantos cliques as pessoas estão dando, é melhor colocar alguma regra antes do download, mas isso é uma regra mais específica. Eu mesmo coloquei um sistema de contador para saber quantos cliques estão dando para A ideia principal é bem simples. O usuário clica na imagem para fazer download do arquivo em PDF já criado e armazenado em algum local dentro do servidor web. Lembrando que o usuário não pode saber o endereço do arquivo, deve apenas pegar o arquivo aparecendo no “browser”.
O primeiro passo é: a imagem que o usuário final clica com o mouse deve ser do 3po ImageBueon (componente da ferramenta Visual Studio 2012). A listagem 1 mostra o exemplo.
Listagem 1 – Código da ImageBueon
<asp:ImageBueon ID="imgEdicao06" CssClass="image" Width="220" fazer download. O segundo passo é: como o endereço do PDF está gravado dentro do banco de dados, preciso pegar o endereço para que o buffer seja feito. Neste momento, não vou mostrar como se conectar no banco de dados e fazer um select para pegar a informação, existem vários outros ar3gos no site www.ecode10.com que mostram como fazer isso.
O retorno dos dados estão dentro de um DataSet ou DataTable, você escolha o que é melhor pra você. A listagem 2 mostra como fazer o buffer.
Listagem 2
–
Fazendo o buffer para
Applica3on/PDF por isso que no final o que é gerado na download do PDF.
tela é o PDF sem mostrar o endereço. //pegando a string de do pdf
string
2012. O conteúdo que precisa ser mostrado é o pdfPath
=
dtSet.Tables[0].Rows[0][0].ToString();
Na Url mostra apenas o nome da página onde o usuário estava antes. Um exemplo xpico disso é o download da revista eCode10 Magazine no site www.ecode10.com. Espero que tenha gostado e //criando uma variável para download –
componente WebClient()
WebClient client = new WebClient();
//fazendo
download
do
pdf
pelo
endereço pego anteriormente
Byte[]
buffer
=
client.DownloadData(pdfPath);
Response.ContentType
=
"application/
pdf";
Response.AddHeader("content-length",
buffer.Length.ToString());
//escrevendo
o
buffer
na
tela
do
usuário, onde aparece o PDF
Response.BinaryWrite(buffer);
Note-­‐se que cada linha da listagem 2 explica de maneira rápida o que faz. O componente u3lizado para download é o WebClient da ferramenta Visual Studio qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org. Estudar Inglês
Caro(a) leitor(a) do meu blog.mauriciojunior.org, hoje eu vou falar um pouco sobre a luta de aprender um pouco inglês e ao mesmo tempo mostrar o tanto que é importante conhecer, falar e ouvir uma segunda língua; principalmente se for mundial como o inglês.
Não sei se pra você, mas pra mim, estudar uma outra língua sempre foi muito dizcil e cansa3vo. Nunca consegui ver o resultado, a melhora ou a fluência chegando nos primeiros anos de estudo. Muitos professores falam para olhar uma criança aprendendo falar, com dois ou três anos que começa a juntar as frases, entender o que as outras pessoas falam e conhecer novas palavras. A vantagem de uma criança é que existe a convivência com o pai e a mãe que falam português o tempo todo. No Brasil, não temos a convivência de alguém falando inglês a todo momento. Poucas famílias tem o privilégio de terem os pais falando inglês. Tive uma professora que falava inglês fluente sem ter estudado fora do Brasil, isso porque os pais falavam inglês dentro de casa a todo tempo.
Depois de 2 anos e meio estudando inglês em uma escola específica, viajei para fora do Brasil e consegui ver o avanço. Consegui entender as pessoas e falar, mesmo que gagejando e procurando as palavras. O primeiro passo foi perder o medo de falar, mesmo que errado. Quando uma pessoa de fora vem ao Brasil e começa a falar português, as palavras, conjugação de verbo, não são das melhores; mesmo assim conseguimos entender. Funciona do mesmo jeito pra eles.
O segundo passo foi me matricular em uma escola de inglês nos Estados Unidos para aprender. Do Brasil mesmo, procurei uma empresa especializada em intercâmbio e comprei um pacote para ficar 22 dias estudando inglês pelo menos um período do dia. Até 30 dias não precisa de visto de estudante (foi essa informação que 3ve). Trabalhando, não pude ficar mais tempo, o meu desejo ficar pelo menos 6 meses. O terceiro passo foi encontrar um curso de inglês que todos u3lizam para aprender inglês. O curso não foi barato, você instala no computador e faz aulas falando, repe3ndo, ouvindo e escrevendo. O curso chama Roseta Stone e custou $499,00 dólares em promoção. É um curso muito bom, mas precisa ter disciplina porque você faz o seu tempo.
O quarto passo foi pedir conselho ao professor de inglês para estudar em casa com outro 3po de livro, o mais recomendado possível. Ele me mostrou um livro do autor chamado Raymond Murphy de Cambridge. O xtulo do livro é Essen3al Grammar in Use (cor vermelha). Existe uma série desses livros para aprender inglês em casa, fazendo uma lição por dia. No Brasil cada livro custa cerca de R$ 200,00 reais, nos Estados Unidos comprando pela Amazon.com o livro custa cerca de $ 19,00 dólares. Pronto, comprei pela livraria e chegou em casa depois de 20 dias. Não paga imposto nenhum comprando livro fora do país, compensa bastante.
Todos os dias e todas as viagens que faço para fora do Brasil, procuro conversar bastante, ouvir bastante e estudar os livros. Se na sua família tem alguém que fala bem o inglês, pra3que com ela sempre. Isso vai fazer bem a você e a outra pessoa. Advinha, até hoje estudo inglês lendo livros normais, conversando, estudando livros de gramá3ca, ouvindo vídeos pela Internet e ouvindo músicas em inglês. Só ouvir músicas em inglês sem saber as palavras não compensa, procure as letras das músicas e pra3que muito. Lendo livros an3gos, percebi que os estudados da época sempre falavam mais de uma língua, na verdade mais de duas. Fico pensando, como eles faziam isso? O segredo era gostar, estudar e conversar.
O segredo é gostar de estudar a língua, não importa qual. Isso porque terá um mo3vo e mo3vação para aprender mais rápido. Depois eu vou postar aqui como se deu a mistura das línguas, antes era só uma no mundo todo, acredita?
Qual a importância de aprender outra língua? Primeiro de tudo, o conhecimento sempre é bom e se você perder um emprego muito melhor fora do Brasil pra ganhar mais do que você sonha, ai sim dará importância como eu dei.
Pagamento móvel
Hoje ninguém pega em dinheiro, o dinheiro fica no banco que pode ser acessado pelo Internet Banking. Quase ninguém anda com dinheiro, anda com cartão de crédito ou débito que no final fatura através de boleto ou débito na conta. O comerciante que está atento, usa a máquina para passar cartão ou o próprio celular usando aplica3vos para pagamento como o da CIELO.
[Pagamento e recebimento pelo celular -­‐ idgnow.com.br]
Olá pessoal, gostaria de falar hoje sobre esse assunto tanto quanto polêmico e ao mesmo tempo inovador. O primeiro destaque que gostaria de falar é referente ao recebimento de salário, quase ninguém recebe mais o salário na mão, ou através de cheque administra3vo. Quase ninguém porque eu conheci uma pessoa que recebia com cheque administra3vo que trocava diretamente no caixa eletrônico. Algumas ajudantes de casa também preferem receber o dinheiro do que depósito em conta.
Algum tempo atrás, passaram de pagamento em dinheiro para pagamento em bancos, isso foi uma inovação. Essa inovação envolveu segurança para o trabalhador e menos assalto no dia do pagamento. O dinheiro passou a ficar no banco onde o trabalhador pode fazer pequenos saques, pagamentos e tudo mais.
Para comprar alguma coisa, você 3nha que ir ao comércio e escolher o produto. A inovação veio com a Internet e o comércio eletrônico. No início, todo mundo começou a estranhar comprar um produto usando o computador e muitas vezes sem experimentar, pegar, sen3r e cheirar. Hoje ninguém vive sem comprar pela Internet nos sites de comércio, querendo ou não, facilita muito a vida das pessoas .
[CIELO no iPhone -­‐ geracaoiphone.blogspot.com]
Um dia desses estava lanchando em um determinado estabelecimento quando percebi que, não 3nha dinheiro dentro da carteira. Até a noite anterior eu sei que 3nha dinheiro porque 3nha sacado, mas alguma situação aconteceu para que o dinheiro fosse re3rado da carteira. Em resumo, estava sem dinheiro e precisando pagar o estabelecimento. Ao perguntar ao lojista se ele aceitava cartão, ele veio com o celular e o aplica3vo da CIELO pedindo o número e a senha. Achei fantás3co e acima de tudo confiei no estabelecimento.
Você se sente confortável e confiante em fazer pagamento usando o seu cartão de crédito? A nossa cultura está acostumada em passar o cartão na máquina e não no celular de alguém usando o aplica3vo na CIELO. Se receber pagamento no celular/
smartphone já é disponível, que tal fazer pagamento usando o mesmo disposi3vo?
Imagina você u3lizar o seu celular, smartphone, tablet (de qualquer marca) para fazer pagamento a um estabelecimento? Você se sen3ria confortável pagar alguma conta usando o seu celular? Você se sente confortável deixando o seu cartão de crédito gravado dentro de um aparelho pequeno, de fácil perda e foco de assaltantes como no Brasil? Esse é um assunto muito polêmico porque toda essa tecnologia é nova.
[Dinheiro no celular -­‐ www.techlider.com.br]
Existem várias tecnologias existentes para fazer pagamento usando celular, nenhuma bem explorada no Brasil. No mestrado que fiz na Universidade de Brasília abordei o assunto e acabei gerando um framework para pagamento usando qualquer disposi3vo móvel. Funciona muito bem e com bastante segurança.
No Brasil, o pagamento através de disposi3vos não está difundido e ainda pode demorar devido a cultura. Pra você que for usar algum 3po de pagamento usando o celular, preste atenção sempre de como os dados estão sendo armazenados, como a transmissão está sendo feita e se a segurança está sendo aplicada, mesmo que perca o disposi3vo.
Goste você ou não, um dia vai chegar o momento de fazer pagamento usando qualquer disposi3vo móvel no Brasil. Esse dia pode chegar sem que você perceba e é necessário entender todo seu funcionamento. Pode ser que o pagamento usando "maquininha" de cartão nunca acabe, acredito que uma outra opção será criada para ajudar àqueles que usam tecnologia.
Estava eu em uma loja comprando brinquedos ao meu sobrinho fora do Brasil. No momento da fila uma moça com a camisa do Google me abordou perguntando se gostaria de conhecer uma tecnologia de pagamento móvel. Respondi que sim e ela começou a falar do Google Wallet. Ela abriu um aplica3vo no celular com Android e me informou como cadastrar meu usuário e cartão de crédito. Chegando a minha vez no caixa, ela deixou o celular na minha mão e pediu pra eu aproximar o aparelho da máquina. Ao aproximar, o aparelho pagou a conta u3lizando o cartão de crédito deles, sim do Google. Eles pagaram a minha conta e demonstraram como funciona o aplica3vo.
A tecnologia u3lizada foi a NFC, ele é capaz de se comunicar em curto alcance. O caixa tem um aparelho com a mesma tecnologia que recebe a informação de pagamento e processa a venda. Não vou entrar em detalhes aqui sobre a tecnologia, mas meus dados ficaram gravados dentro do aparelho. Se o celular é perdido todos os dados são perdidos e qualquer pessoa pode usar. A melhor solução seria usar uma unidade cer3ficadora, ou seja, uma empresa responsável por guardar a informação de forma segura na nuvem e não no disposi3vo.
A Apple tem um aplica3vo de compras, nele você pode comprar 3ckets, cupons e passagens aéreas. O chamado PassBook está disponível na versão 6.0 do iOS fora do Brasil. No Brasil, a tecnologia ainda não foi a3vada, lembrando, desenvolvedores podem desenvolver aplica3vos próprios pra ele.
Outras tecnologias mais baratas existem para fazer a mesma coisa, isso porque nem todo aparelho possui esse chip NFC de comunicação. Mesmo assim, esse ar3go não é para falar das tecnologias ou entrar muito em detalhe; espero que tenha gostado do que leu até agora e comece a se preparar para usar novas tecnologias.
Aplicativo iCredCard - fácil e simples de
controlar os seus gastos com cartão de crédito
http://itunes.apple.com/br/app/icredcard/id386489630?mt=8
Segurança da informação nunca é demais
Caro(a) Leitor(a) e Usuário(a) de informá3ca. A segurança da informação nunca foi demais e nunca foi tão importante nos dias de hoje. hep://g1.globo.com/bom-­‐dia-­‐brasil/videos/t/edicoes/
v/roubos-­‐de-­‐dados-­‐pessoais-­‐aumentam-­‐no-­‐brasil/
2345834/
Neste ar3go eu vou falar um pouco sobre a segurança da informação relacionado ao desenvolvimento de so„ware e segurança de dados.
Você sabia que existem aplica3vos que podem te ajudar a guardar senhas, guardar informações de forma criptografada e segura?
Sempre me preocupei com esse 3po de assunto, principalmente porque é mais fácil enganar pessoas pelo telefone, pela Internet e por e-­‐mail, a fim de pegar informações pessoais como nome, CPF, iden3dade e data de nascimento do que pessoalmente.
Hoje eu tenho mais de três aplica3vos publicados na Internet para “smartphone” e “tablets” com o obje3vo de guardar senhas de forma segura em seus disposi3vos. Alguns grá3s e outros pagos, mas com valor irrisório como $0,99 de dólar.
A engenharia social é muito usada no mundo da informá3ca. Na verdade ela serve para os dois casos, mas esse assunto é outro ar3go.
Segue alguns links para baixar os aplica3vos:
Basta andar um pouco pelas feiras de centros urbanos para encontrar pessoas que vendem dados de milhões de pessoas em DVD ou CD, parecendo um produto como roupa e sapato.
iSecurity Password Free
Navegando um pouco na Internet, você encontra noxcias falando que “hackers” pegaram dados de usuários nas redes sociais e venderam para tal site ou estão vendendo pela Internet. O que me pergunto sempre é: Será que os nossos dados estão sendo expostos a todo 3po de gente? Será que suas informações estão junto desse DVD ou CD encontrado nas ruas? No final desse ar3go deixo alguns links mostrando as reportagens. Hoje pela manhã assis3ndo o Jornal do Bom Dia Brasil, a âncora falou em dois momentos diferentes sobre fraude de dados e roubo conxnuo de informação. São dois vídeos diferentes: hep://g1.globo.com/bom-­‐dia-­‐brasil/videos/t/edicoes/
v/aumenta-­‐numero-­‐de-­‐fraudes-­‐com-­‐dados-­‐pessoais-­‐
roubados-­‐de-­‐consumidores/2345760/
Para iPhone:
heps://itunes.apple.com/us/app/isecurity-­‐password-­‐
free/id491186982
iSecurity Password Pro
heps://itunes.apple.com/app/isecurity-­‐password-­‐pro/
id524090167?mt=8
Para Android: iPass Free
heps://play.google.com/store/apps/details?
id=mauriciojunior.org.ipass.u3ls
iPass Full
heps://play.google.com/store/apps/details?
id=mauriciojunior.org.ipassfull.u3ls
Eu poderia escrever aqui muitas informações sobre os 3pos de roubo, mas para não ficar muito extenso, vou dar algumas dicas de prevenção.
Maneiras de prevenir roubos de dados
Guarde com segurança suas senhas.
Muitos analistas de segurança falam sobre o que não fazer ou que o não clicar. Mas na prá3ca, “o ladrão moderno” sabe o que fazer para que você abra e execute o que ele quer. Não coloque suas senhas como se fossem contatos na sua agenda eletrônica.
Ele sabe fazer com que a sua curiosidade seja “a3çada”, em qualquer 3po de assunto. O único problema é “você mesmo”. Você precisa se controlar para não fazer besteira ou clicar em besteira.
Passando para a forma prá3ca de prevenção, não faça as seguintes coisas:
Não clique em qualquer link que recebe por e-­‐mail. Veja dois vídeos feitos por mim mostrando um e-­‐mail recebido indevido, de supostas empresas.
hep://www.ecode10.com/video/71/video-­‐email-­‐
recebido-­‐findindo-­‐ser-­‐o-­‐Detran
hep://www.ecode10.com/video/72/Video-­‐Virus-­‐
enviado-­‐pelo-­‐suposto-­‐banco-­‐santander
Procure não ser curioso demais na Internet, para os homens: não clique em fotos de mulheres peladas ou de vídeos de famosas.
Para as mulheres: não saia clicando em qualquer link de fofoca ou produtos de beleza.
Procure comprar pela Internet usando sempre boleto bancário, tem 5% de desconto; principalmente para sites não conhecidos.
Se comprar em site conhecido usando cartão de crédito, verifique sempre o HTTPS no endereço do site e confira sempre a fatura do cartão.
Nunca informe dados pessoais pelo telefone, não importa quem ligou; (você nunca sabe quem está do outro lado da linha).
Se você compra pela Internet usando cartão de crédito, procure usar apenas ele; não use outros.
U3lize senhas com caracter especial, maiúsculo, minúsculo e números.
Não associe suas senhas a datas de aniversário de filhos, mãe, pai, dia do casamento, número de telefone ou endereço.
Altere sempre sua senha, no mínimo a cada 60 dias.
Não coloque seus dados pessoais em redes sociais, os criminosos gostam disso. Se já colocou, procure deixar como privado. A maioria das redes sociais tem essa opção.
Dados roubados
Se algum documento seu foi roubado é melhor comunicar ao Serasa para que o uso indevido seja impedido. Para isso o site Serasa criou um cadastro para o usuário. Veja os passos acessando o link abaixo:
hep://www.serasaconsumidor.com.br/
gratuito_roubados.html Seguindo essas dicas deixadas aqui, acredito que você estará usando bem a segurança da informação, mas lembre-­‐se de que “um vacilo” tudo isso cai por água abaixo. Seu dinheiro pode sumir e seus dados podem ser expostos.
Desenvolvimento de soIware
Os desenvolvedores de hoje não se importam muito com segurança de dados, querem desenvolver o aplica3vo, so„ware ou projeto de forma rápida e sem muito trabalho. É importante ter sempre em mente a segurança dos dados, começando com a “string” de conexão com o banco de dados. Essa “string” evita que se o seu servidor for invadido, os dados como usuário e senha não serão pegos.
Sem conseguir pegar os dados do banco de dados, o invasor não consegue acessar a sua base de dados, que no meu ponto de vista é tão importante quanto o so„ware. Se possível, u3lize algoritmos de criptografia seguros e lembre-­‐se sempre que a chave u3lizada é tão importante quanto à senha.
Segue alguns vídeos feitos por mim mostrando o desenvolvimento seguro, segue também um curso “desenvolvendo so„ware com segurança”. Vídeo MD5:
hep://www.ecode10.com/video/69/video-­‐md5
Criptografia de URL:
hep://www.ecode10.com/video/73/criptografia-­‐para-­‐
ser-­‐usada-­‐na-­‐URL
SHA1:
hep://www.ecode10.com/video/81/Curso-­‐de-­‐CSharp-­‐
com-­‐Visual-­‐Studio-­‐2012-­‐U3lizando-­‐SHA1
Curso desenvolvendo soIware com segurança:
hep://www.mauriciojunior.org/video-­‐aula/6/
Desenvolvendo-­‐com-­‐Seguranca Fico por aqui e qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org. Links das reportagens:
hep://informa3ca.centralblogs.com.br/post.php?
href=hackers+vendem+dados+de+9+milhoes+de
+usuarios+a
+telemarke3ng&KEYWORD=40153&POST=4069842
hep://itweb.com.br/56755/usuarios-­‐vendem-­‐dados-­‐
em-­‐troca-­‐de-­‐popularidade/
hep://www.techlider.com.br/2011/08/cibercriminosos-­‐
vendem-­‐informacoes-­‐roubadas-­‐nas-­‐midias-­‐sociais/
Seleciona o valor da combo/dropdownlist
digitando em campo texto
Caro(a) Leitor(a), gostaria de falar e mostrar hoje como selecionar valor dentro do dropdownlist digitando no campo texto e dando tab. Esse caso é muito usado quando a combo ou o dropboxlist possui muitos valores e fica impossível de digitar. A melhor solução para buscar algum dado dentro do combo/dropdownlist com muitos dados, é criar um campo texto, digitar o valor e na saída o script busca os valores dentro do objeto e seleciona.
U+lizado no ar+go:
-­‐ Ferramenta de desenvolvimento Visual Studio 2012
-­‐ Linguagem C#
-­‐ Componente DropboxList
-­‐ Tipo de aplica3vo Web
Listagem 1 – Preenchendo dropdownlist.
HTML
<asp:DropDownList ID="cmbMinhaCombo" runat="server"></asp:DropDownList>
C#
private void preencherCombo()
{
cmbMinhaCombo.DataSource = BuscaDados();
cmbMinhaCombo.DataTextField = "Descricao";
cmbMinhaCombo.DataValueField = "Valor";
cmbMinhaCombo.DataBind();
}
Primeiro passo
O primeiro passo é preencher o dropdowlist com o dado retornado do banco de dados. Não vou entrar em detalhes de como retornar do banco de dados, isso porque existem vários ar3gos publicados no site mostrando como fazer isso. Caso tenha alguma dúvida, pode entrar em contato que faço um ar3go mostrando como retornar o dado do banco de dados.
A regra principal é buscar dados do banco de dados e retornar o objeto do 3po DataTable. Depois de retornar o dado, basta atribuir o valor ao DataSource e informa o campo texto e valor. No final basta chamar o método DataBind (para preencher os dados no objeto). Listagem 1.
Segundo passo
break;
O segundo passo é simples e ao mesmo tempo de necessária atenção. Depois de preenchido a dropdownlist, vamos criar um campo texto antes e adicionar o método para chamar a função em javascript.
case "undefined":
Veja a listagem 2 mostrando como foi montado na parte HTML e C#.
Listagem 2 – Montando o segundo passo. document.getElementById(objTo).value = '';
break;
}
}
</script>
HTML
<asp:TextBox ID="txtMeuValor" runat="server" MaxLength="4" Width="50px"></asp:TextBox>
C#
protected void Page_Load(object sender, EventArgs e)
{
JavaScript
<script language="javascript">
func3on PassaValor(objFrom, objTo) {
document.getElementById(objTo).value = document.getElementById(objFrom).value;
var vTipoObjeto = document.getElementById(objTo).type;
if (!Page.IsPostBack)
{
txtMeuValor.Aeributes.Add("OnBlur", "PassaValor('" + txtMeuValor.ClientID + "','" + cmbMinhaCombo.ClientID + "')");
}
}
if (vTipoObjeto.search('select') != -­‐1)
vTipoObjeto = 'select';
switch (vTipoObjeto) {
case "select":
if (document.getElementById(objTo).selectedIndex == -­‐1) {
alert("Atenção: não existe este dado, favor buscar novamente.");
document.getElementById(objFrom).value = '';
document.getElementById(objFrom).focus();
}
//document.getElementById(objTo).selectedIndex = 0;
Note que o JavaScript recebe dois valores, o primeiro o objeto “de” e o segundo o objeto “para”. Na primeira linha, o objeto “para” recebe o valor do objeto “de”. Depois ele verifica o 3po do objeto.
Se o objeto for do 3po “select” (caracterizado por ser combo) o JavaScript fala para selecionar o dado. Caso contrário ele emite uma mensagem ao usuário.
Na parte do C#, logo na entrada do método; adicionei o atributo “onBlur” para o campo texto adicionado na parte HTML. Nesta linha de código eu chamei o método e passei os valores necessários usando o “ClientId”.
O resultado final é bem interessante. Figura 1.
Bom, eu fico por aqui e qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org. Aplicativo: iComenda
iComenda é um aplica3vo que funciona apenas no iPhone, iPod e iPad.
O aplica3vo tem os obje3vos: 1 -­‐ BUSCAR OS CEP's e mostrar endereços online; 2 -­‐ BUSCAR AS ENCOMENDAS enviadas pelo CORREIO e saber o status / local onde se encontra o pacote online. 3-­‐ CALCULA FRETE com as referências de CEP origem e des3no mais o peso do produto; além das modalidades específicas de frete: PAC, SEDEX, SEDEX 10, SEDEX A COBRAR E SEDEX HOJE.
Download: hep://itunes.apple.com/br/app/icomenda/
id412358490?mt=8 MVC e Entity Framework Parte 1
Caro(a) Leitor(a) hoje eu vou falar e mostrar na prá3ca como trabalhar com MVC e “En3ty Framework”, com ele você vai poder criar um sistema ou site. Pra quem não sabe o que é MVC, é um padrão de desenvolvimento que tomou o mundo.
Como esse padrão é amplo, cada empresa de so„ware criou o seu e esse é baseado na Microso„ seguindo o padrão “Model View Controller”. Foi usado:
Ferramenta Visual Studio 2012
Banco de dados SQL Server 2008
Linguagem C#
Tipo do projeto MVC Web
Antes de começar a mostrar o desenvolvimento, vou falar sobre o que fiz e qual foi a minha ideia. Lembro que vou focar mais na prá3ca do que na teoria. A primeira coisa que você precisa saber quando for usar MVC é a criação do projeto. Esse 3po de projeto precisa ser pensado desde o início, isso porque o modo de fazer é totalmente diferente do tradicional ASPX. Microso„ criou o jeito dela, a Sun criou o dela, a linguagem PHP tem o jeito dela e assim por diante. Você pode criar as classes que achar necessário, subdividir o projeto em vários projetos e desconectar as partes do sistema.
Desconectar as partes do sistema é muito importante para quem usa esse 3po de projeto. Em resumo, a parte que conecta no banco de dados tem que ser uma parte separada ou desconectada, isso porque se for preciso mudar de banco, basta alterar as classes e tudo vai funcionar.
Isso também funciona para a parte do layout, se você for fazer um projeto para web e outro para desktop que usa o mesmo banco de dados, pra que u3lizar ou recriar as classes já criadas? O mesmo é reaproveitar as classes de controles e regras de negócio, o que é mudado é apenas o layout.
Para usar a ferramenta Visual Studio 2012 gratuitamente, acesse o site hep://
www.microso„.com/visualstudio/ptb/downloads e faça download do módulo “Express”. Lá tem as ferramentas para desenvolvimento “Web”, “Desktop”, “Windows 8”, “Windows Phone” e mais.
A outra parte não menos importante é a comunicação com o banco de dados, pra isso eu usei no exemplo o famoso “En3ty Framework” criado pela Microso„.
O “En3ty” foi criado para ajudar o desenvolvedor a se conectar com o banco de dados, mandar instruções como INSERT, SELECT, UPDATE e DELETE de uma melhor maneira usando menos linhas de código.
Lembre-­‐se o que falei anteriormente, cada empresa tem a sua maneira de construir MVC e atuar. A Figura 1 – Tipos de projeto – Fonte: Microso„
Na prá+ca
Se você faz parte de uma empresa hoje que tem suas áreas separadas, como o DBA (responsável por criar banco de dados, criar tabelas, gerar informações, gerar “procedures” e mais), desenvolvedor (analista e criador de so„ware para qualquer plataforma), arquiteto de so„ware e outros; então você deve saber o desenvolvedor não tem acesso para criar tabelas.
Como desenvolvedor você só começa a codificar depois que o banco de dados já está pronto. Muitos exemplos que vi na “Internet”, os desenvolvedores faziam o banco de dados. Isso não é a nossa realidade ou não é assim que acontece no dia a dia.
Figura 3 – Criando um projeto novo.
O próximo passo é escolher a linguagem e o 3po do projeto, no nosso caso é MVC. Figura 4. O exemplo aqui será mostrado como se o banco de dados já es3vesse pronto e o desenvolvedor 3vesse que fazer o so„ware que grava as informações dentro do SQL Server. Veja a estrutura do nosso banco de dados, figura 2.
Figura 4 – Escolhendo a linguagem e o 3po de projeto
Figura 2 – Estrutura do banco de dados
As duas tabelas já estão prontas e vinculadas. A tabela de usuários e uma tabela de sites, uma vinculada à outra pela chave primária e chave estrangeira.
Note que figura 4, a linguagem escolhida é a C# Web e o 3po de “template” escolhido é o “ASP.NET MVC 4 Web Applica3on”. Basta agora colocar o nome do projeto e clicar no botão OK.
Agora preciso criar um projeto do 3po MVC para conectar ao banco e inserir, alterar, excluir e selecionar valores. Clique em “File >> New >> Project”, figura 3.
Depois de ter o projeto, saber o banco de dados e as tabelas, precisa instalar o componente da Microso„, responsável pelo “drive” de comunicação entre a página e o banco. Existem pessoas que fazem o seu próprio “framework de dados” e outras u3lizam componentes prontos. No nosso caso, vamos u3lizar o componente “En3ty Framework” mencionado anteriormente, (figura 5).
Clique com o botão direito em cima da pasta “References” e clique no menu “Manager NuGet Packages...”. Procure com por “En3ty Framework” versão 5.0.0 e instale esse pacote, mostrado na figura 5.
using System;
using System.Collec3ons.Generic;
using System.Linq;
using System.Web;
using System.Data.En3ty;
using System.ComponentModel.DataAnnota3ons;
using System.ComponentModel.DataAnnota3ons.Schema;
namespace MVCSAC.Models
{
public class Site
{
[Key]
public int CHSite { get; set; }
Figura 5 – Instalando o “En3ty Framework”
O projeto “template” possui três pastas “Controller, Models e Views”, figura 6.
[Required(ErrorMessage=("Digite o nome do site."))]
[Display(Name="Nome do Site")]
public string NOSite { get; set; }
[Required(ErrorMessage=("Digite a situação"))]
[Display(Name="Situação")]
public string SITSite { get; set; }
}
}
Listagem 1 – Classe Site
Note que cada atributo possui “get e set” dos campos no banco de dados. A chave da tabela é indicada dentro da classe normalmente, basta usar o comando “Key”. Figura 6 – Pastas MVC
O próximo passo é criar as classes de acordo com as tabelas do banco de dados. Se eu tenho uma tabela chamada Site, vou criar uma classe chamada Site.cs. Se tenho outra tabela chamada Usuario, vou criar uma classe chamada Usuario.cs e assim por diante. Isso deve acontecer dentro da pasta Model.
Cliquei com o botão direito do mouse em cima da pasta “Models”, escolhi a opção Add >> Class e coloquei o nome Site.cs. Listagem 1.
O comando “Required” indica que esse campo precisa ser preenchido e se não for preenchido vai aparecer à frase indicada.
O comando “Display” é o nome que vai aparecer ao usuário dentro da página, para não aparecer o nome do campo na tela do usuário.
Depois de criar a classe parecida com o banco de dados, vamos criar outra classe para conectar ao banco de dados. O nome dessa classe deve ser o mesmo nome da conexão.
Crie uma classe de conexto chamada iSACContext.cs. Herdei o “DbContext” do En3ty e adicionei a classe como tabela. Listagem 2.
using System;
using System.Collec3ons.Generic;
using System.Linq;
using System.Web;
using System.Data.En3ty;
using MVCSAC.Models;
namespace MVCSAC.DAL
{
public class iSACContext : DbContext
{
public DbSet<Site> Sites { get; set; }
public iSACContext()
{
Database.SetIni3alizer<iSACContext>(null);
}
}
}
Listagem 2 – Classe de Conexão com o banco de dados
Note que coloquei o DbSet<Site> para indicar a classe como uma tabela e dei o nome da variável Sites {get ; set;}.
Passando agora para o arquivo “Web.config”, o nome da conexão precisa ser o mesmo nome da classe de conexão. Listagem 3. <connec3onStrings>
<add name="iSACContext" connec3onString="Data Source=(local);Ini3al Catalog=iSAC;Integrated Security=SSPI" providerName="System.Data.SqlClient" /
>
</connec3onStrings>
Listagem 3 – Colocando a conexão dentro do Web.config.
A string de conexão contém primeiramente o nome e depois a “connec3onString” com os dados do servidor, banco de dados e “provider”. Com isso, a conexão está pronta e o sistema conecta no banco sem qualquer problema. O próximo ar3go eu vou falar como criar as classes e as operações de inserir, alterar, deletar, selecionar usando MVC.
Qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org. Até o próximo ar3go de con3nuação.
MVC e Entity Framework Parte 2
Caro(a) Leitor(a), gostaria de informar que este ar3go é uma con3nuação da parte 1 publicado anteriormente no link abaixo. Antes de começar a ler este ar3go, comece pela parte 1.
using System.Linq;
using System.Web;
using System.Data.En3ty;
using System.ComponentModel.DataAnnota3ons;
Link: hep://ecode10.com/ar3go/1657/MVC-­‐e-­‐En3ty-­‐
Framework-­‐Parte-­‐1
using System.ComponentModel.DataAnnota3ons.Schema;
namespace MVCSAC.Models
O que falei na parte 1 não vou repe3r nesta parte 2, vou con3nuar o passo a passo. bem simples. Na parte 1 nós falamos do banco de dados pronto e da string de conexão.
{
public class Site
{
[Key]
Ferramenta: Visual Studio 2012
public int CHSite { get; set; }
Plataforma: Web MVC
Linguagem: C#
[Required(ErrorMessage=("Digite o nome do site."))]
Banco de dados: SQL Server 2008
[Display(Name="Nome do Site")]
public string NOSite { get; set; }
Criamos uma classe de contexto chamada iSACContext.cs herdando de DbContext. Criamos uma classe que é exatamente a tabela do banco de dados, ou seja, possui os mesmos atributos.
É uma tabela simples chamada Sites, ela possui os atributos CHSite, NOSite e SITSite, a chave primária, nome do site e situação do site. Essa classe Site.cs foi criada na pasta Models do projeto. Esse é o primeiro passo que precisa ser feito depois da conexão com o banco de dados. Listagem 1.
Listagem 1 -­‐ Classe Site.cs dentro da pasta Models
using System;
using System.Collec3ons.Generic;
[Required(ErrorMessage=("Digite a situação"))]
[Display(Name="Situação")]
public string SITSite { get; set; }
}
}
Depois da “Model” criada, passamos para a “Controller”. A “Controller” fica em outra pasta chamada “Controllers” no plural. A classe deve ser ser chamada com o mesmo prefixo e a palavra “controller”, por exemplo: SiteController.cs. Depois da “Model” criada, passamos para a “Controller”. A “Controller” fica em outra pasta chamada “Controllers” no plural. A classe deve ser ser chamada com o mesmo prefixo e a palavra “controller”, por exemplo: SiteController.cs. Para criar, basta clicar com o botão direito em cima da pasta, escolha a opção “Add” e depois “Controller”. Figura 1.
Note que na figura 2, é colocado o nome como “SiteController” e o “template” escolhido como MVC controller with empty read/write ac3ons. Depois disso clique no botão Add.
Dentro desse “Controller” são criados métodos específicos do MVC. Por exemplo, o método chamado “Index” é acionado quando alguém entra na primeira página. Toda vez que alguém digitar o endereço hep://
localhost:8080/MVC/Site o primeiro método que o código vai passar é o “Index”.
Se você precisa preencher alguma “dropboxlist” ou qualquer outro objeto, preencha-­‐o dentro do método “Index”. Con3nuando o exemplo aqui, para preencher uma lista, busquei diretamente do banco de dados.
Antes criei uma instância da classe de contexto falada na primeira parte de outro ar3go, a parte 1. Listagem 2.
Listagem 2 -­‐ Gerando instância e mostrando Index.
Figura 1 -­‐ Criando “Controller” public class SiteController : Controller
Clicando na opção “Controller”, aparece outra tela para colocar o nome e escolher o 3po de “template” apropriado. Lembrando que neste primeiro momento, escolheremos uma opção simples e vazia “empty”. Imagem 2.
{
iSACContext db = new iSACContext();
//
// GET: /Site/
public Ac3onResult Index()
{
var site = db.Sites.ToList();
return View(site);
}
}
Figura 2 -­‐ Colocando o nome no “Controller” e escolhendo “template”
Veja que antes da classe Index(), adicionei a linha iSACContext db = new iSACContext(). Essa linha significa que a classe está preparada para buscar as informações dentro do banco de dados.
A variável “db” pode ser usada na classe toda. Posso usá-­‐la pra tudo. Passando agora para classe “Index”, eu escrevi duas linhas. A primeira para buscar uma lista de coisas e a outra para mostrar os dados na página.
Quando crio o “var site = db.” e adiciono o ponto final, aparece todas as classe disponíveis para acesso ao banco de dados. Figura 3.
A listagem 3 mostra as variáveis de contexto, isto é, aquelas ligadas ao meu banco de dados SQL Server 2008.
Con3nuando com o método “Index”, a variável criada chamada “sites” retorna a uma lista de dados (se houver dados na tabela), ou seja, na parte da “View”. Por isso o return View(sites);. Com MVC, daqui pra frente tudo funciona com “View”. No nosso caso CSHTML. Depois da classe “Index”, precisamos gerar a parte do HTML, aquela parte onde mostra para o usuário o resultado final.
Para revisar, até agora fizemos a parte de banco de dados na classe de contexto, depois criamos as “models”, agora a “controller” e classe “Index”. Nenhuma delas é a parte de HTML.
No modo MVC, a parte HTML virou CSHTML. Para gerar a parte do usuário, basta clicar em cima do método “Index” localizado dentro da pasta “Controllers”. A figura 4 mostra como funciona.
Figura 3 -­‐ Clicando o ponto e aparecendo classes.
Todas as classes que aparecem (mostradas na figura 3) estão disponíveis para o uso direto com o banco de dados. A classe Sites funciona como se fosse uma tabela no SQL Server.
Note também que estas classes são as mesmas criadas dentro da pasta “Models” e referencias como tabelas na classe de contexto. Listagem 3.
Listagem 3 -­‐ Classe de Contexto
public class iSACContext : DbContext
{
//Tabelas
public DbSet<Site> Sites { get; set; }
public DbSet<Usuario> Usuarios { get; set; }
public DbSet<Chamado> Chamados { get; set; }
public DbSet<Resposta> Respostas { get; set; }
}
Figura 4 -­‐ Gerando View
Escolhendo “Add View”, uma nova tela aparece com algumas opções. Hoje temos dois 3pos de “engine”, a primeira ASPX (C#), aquela que já conhecemos e a outra chamada “Razor” (CSHTML). Não vou explicar agora a diferença entre as duas opções, mas vou escolher a opção nova chamada “Razor”. O próximo passo é criar um 3po forte para a View, ou seja, basta indicar a classe “model” chamada “Site” criada dentro da pasta “Models”.
ViewBag.Title = "Index";
Existe ainda um “template” pra ser escolhido, no nosso caso será uma lista, ou List. Veja a figura 5.
</p>
}
<h2>Index</h2>
<p>
@Html.Ac3onLink("Create New", "Create")
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.NOSite)
</th>
<th>
@Html.DisplayNameFor(model => model.SITSite)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.NOSite)
</td>
Figura 5 -­‐ Adicionando informações para gerar a View
<td>
Note que a parte de “Use a layout or master page” está marcada e em branco. Deixe em branco mesmo, depois retornaremos nesse assunto. Depois de selecionado, basta clicar no botão “Add”. @Html.DisplayFor(modelItem => item.SITSite)
O Visual Studio 2012 cria uma pasta dentro da pasta “Views” do seu projeto e o nome da pasta é Site. Dentro da pasta um arquivo é criado chamado “Index.cshtml”, ou seja, o mesmo nome da classe criada.
A ferramenta gera tudo pra você num piscar de olhos. A listagem 4 mostra como ficou a página “Index.cshtml”.
Listagem 4 -­‐ Index.cshtml criado pela ferramenta
@model IEnumerable<MVCSAC.Models.Site>
</td>
<td>
@Html.Ac3onLink("Edit", "Edit", new { id=item.CHSite }) |
@Html.Ac3onLink("Details", "Details", new { id=item.CHSite }) |
@Html.Ac3onLink("Delete", "Delete", new { id=item.CHSite })
</td>
</tr>
}
</table>
@{
Note que a primeira linha indica a “Model” criada anteriormente. Depois uma tabela normal, lá no final um “foreach” buscando a lista da “model” e mostrando os campos retornados do banco de dados.
Vamos ver o resultado final? Segue a figura 6 mostrando o que apareceu na tela.
Figura 6 -­‐ Resultado final
Note que no endereço da URL está o caminho /
Site. A lista de informações foram mostradas e existe só um dado dentro da tabela. Fico por aqui e em breve publico mais ar3gos falando sobre MVC.
Qualquer dúvida, pode entrar em contato pelo site www.mauriciojunior.org. Aplicativo: iGas
O sistema iGas tem o obje3vo de ajudar as pessoas no controle de combusxvel de seu automóvel. Você pode controlar os gastos com combusxvel a um clique e manter todo o histórico em seu celular. Você pode cadastrar mais de um carro e várias despesas para aquele carro. Todo relatório é feito online e com facilidade.
É necessário ter acesso a internet para usar o sistema.
Download: hep://itunes.apple.com/br/app/igas/
id383456974?mt=8 MVC e Entity Framework Parte 3
Caro(a) Leitor(a) hoje eu vou falar um pouco mais sobre essa tecnologia. Já ouvi muitos desenvolvedores falando que não gostou da forma de desenvolvimento, achou mais dizcil de entender e que prefere fazer do jeito tradicional.
Hoje eu vou dar a minha opinião sobre o assunto e vou con3nuar o exemplo feito nos ar3gos anteriores. Parte 1: hep://www.ecode10.com/ar3go/1657/MVC-­‐e-­‐
En3ty-­‐Framework-­‐Parte-­‐1
Esse “framework” ajuda muito ao desenvolvedor gastando menos tempo com “pool”, “3meout”, “select”, “insert”, “delete”, “update” e outros 3pos de comandos. A minha opinião é que nem tudo da pra fazer usando MVC. Na verdade, nem tudo tem que ser feito usando MVC. Existem muitas maneiras de fazer um sistema ou um site, você só precisa definir o que vai fazer.
Con+nuando com o Projeto
Parte 2: hep://www.ecode10.com/ar3go/1662/MVC-­‐e-­‐
En3ty-­‐Framework-­‐Parte-­‐2
No ar3go parte 2, criamos a parte de cadastrar o site. A própria ferramenta cria os links para editar, detalhar e deletar. Neste ar3go, vou mostrar como executar o link. Ferramentas u+lizadas:
Visual Studio 2012
A listagem 1 mostra o link na página índex.cshtml.
Linguagem: C#
Listagem 1 – Link Editar
Plataforma Web MVC
@Html.Ac3onLink("Edit", "Edit", new { id=item.CHSite })
Comunicação com o banco de dados: “En3ty” Framework Microso„.
O link de edição chama um método “Edit” e passa parâmetro do 3po “id”, ou seja, a chave da tabela. Esse método precisa estar dentro da Controller, nesse caso do SiteController.cs. Listagem 2.
O padrão MVC da Microso„ é um pouco diferente dos outros padrões, principalmente porque os componentes u3lizando “Razor” mudaram um pouco. Antes de começar a fazer um projeto do 3po MVC, o primeiro passo é pensar sempre em MVC.
A forma normal de desenvolvimento usando ASPX mudou. Mas mudou para melhor focando em produ3vidade, facilidade e padrão. O primeiro padrão é o que conecta com o banco de dados. A Microso„ criou o “En3ty Framework” responsável por conectar ao banco de dados e inserir, deletar, atualizar e selecionar valores.
Listagem 2 – Criando método de edição de dados
// GET: /Site/Edit/5
public Ac3onResult Edit(int id)
{
var site = db.Sites.Find(id);
return View(site);
}
Note que coloquei no método a entrada de “int”. Dentro do método u3lizei a variável de contexto (que faz a comunicação com o banco de dados) com o obje3vo de encontrar o item desejado de acordo com o “id”. O código “db.Sites.Find(id)” busca os dados no banco de dados e armazena na variável “site” criada. Depois é necessário retornar o valor com os dados da variável, “View(site)”.
O método é simples no modo geral, mas é necessário criar o arquivo para visualização. Pra isso, clique com o botão direito em cima do nome “Edit” e escolha a opção “Add View”. Imagem 1.
Imagem 2 – Criando formulário de edição.
Note que o nome da “View” é “Edit”; o mesmo nome do método. A “engine” é o “Razor”. Depois disso, marquei a opção “Create a strongly-­‐type view”, automa3camente apareceu todas as classes models.
Escolhi a “model” “Site (... Models)” que faz referência direta a classe. Depois escolhi a opção “Edit” no “Scaffold template”. Isso quer dizer que é usado um “template” de edição para aquele formulário. Depois disso clique no botão “Add”.
O Visual Studio 2012 criou um arquivo chamado “Edit.cshtml” dentro da pasta “View >> Site”. Essa “View” criada possui partes em HTML e partes em .NET. Listagem 3.
Imagem 1 – Adicionando View de Edit.
Outra tela aparece com o obje3vo de criar a “View” de edição dos dados. Seria no caso apenas o formulário baseado na classe “SiteController”. Imagem 2.
Listagem 3 – Página Edit.cshtml.
@model MVCSAC.Models.Site
@{
ViewBag.Title = "Edit";
}
Pra isso, é necessário criar outro método dentro da classe “SiteController.cs”. Listagem 4.
[HWpPost]
public Ac3onResult Edit(Site site)
<h2>Edit</h2>
{
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
db.Entry(site).State = System.Data.En3tyState.Modified;
<fieldset>
<legend>Site</legend>
db.SaveChanges();
@Html.HiddenFor(model => model.CHSite)
return RedirectToAc3on("Index");
<div class="editor-­‐label">
@Html.LabelFor(model => model.NOSite)
</div>
<div class="editor-­‐field">
@Html.EditorFor(model => model.NOSite)
@Html.ValidationMessageFor(model => model.NOSite)
</div>
}
<div class="editor-­‐label">
@Html.LabelFor(model => model.SITSite)
</div>
<div class="editor-­‐field">
@Html.EditorFor(model => model.SITSite)
@Html.ValidationMessageFor(model => model.SITSite)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Esse formulário é muito simples. Ainda falta programar a parte que pega os dados digitados pelo usuário. Depois de digitar os dados e clicar no botão “Save”, os dados precisam ser pegos e gravados dentro da tabela do banco de dados.
No topo do método foi colocado o comando [HepPost]. Isso quer dizer que os dados virão pelo clique do botão e “post” do formulário. A entrada do método é a classe Site (com get e set). A primeira linha dentro do método eu chamo a variável de contexto, mudo o estado dele para modificado e mando salvar as mudanças. O “En3ty Framework” detecta os dados que precisam ser alterados, busca pela chave e faz o “update” na tabela automa3camente.
Essa é mais uma prova de que o “framework” ajuda muito ao usuário. Com duas linhas de código os dados foram alterados sem qualquer problema.
No final do método o usuário é redirecionado para a classe “Index” criada no ar3go parte 2. Imagem 3.
Imagem 3 – Editando os dados pelo formulário.
Note que a URL ficou /Site/Edit/2. Esse Edit chama automa3camente a classe Edit criada e o Edit.cshtml. Mudei para “I” a situação e cliquei em Save. O formulário chamou o método HTTPPost, alterou os dados no banco de redirecionou para a classe “Index” que mostra todos os dados. Imagem 4.
Imagem 4 – Dados alterados.
Note que o dado foi alterado sem qualquer problema. Nos próximos ar3gos, vamos fazer a classe de “Delete”. Qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org. MVC e Entity Framework Parte 4
Caro(a) Leitor(a), hoje vou dar con3nuidade ao nosso projeto feito em três partes até agora. Hoje o comando e funcionalidade que vou mostrar é o “delete” de uma linha. Se você não viu até agora as partes anteriores, acesse os links abaixo:
Parte 1 -­‐ hep://www.ecode10.com/ar3go/1657/MVC-­‐
e-­‐En3ty-­‐Framework-­‐Parte-­‐1
Parte 2 -­‐ hep://www.ecode10.com/ar3go/1662/MVC-­‐
e-­‐En3ty-­‐Framework-­‐Parte-­‐2
Parte 3 -­‐ hep://www.ecode10.com/ar3go/1667/MVC-­‐
e-­‐En3ty-­‐Framework-­‐Parte-­‐3
U+lizado
.NET Framework 4.0
Linguagem C#
Ferramenta Visual Studio 2012
public Ac3onResult Delete(int id)
{
var sites = db.Sites.Find(id);
return View(sites);
}
Listagem 1.
Veja que o parâmetro de entrada é um número e esse número é buscado no banco de dados pelo comando “Find”. No final ele retorna a variável “sites” dentro da View.
Com o método, cliquei com o botão direito em cima do nome “Delete” e escolhi a opção “Add View”, conforme mostra a imagem 1.
Projeto do 3po MVC 4.0
Para clicar no link “delete” é necessário primeiro buscar o item e pedir a confirmação do usuário. Para esse 3po de funcionalidade, vou criar um método e uma página “template”. Depois para confirmar a deleção, vou criar outro método para deletar do banco de dados.
Imagem 1 – Add View
Os dois métodos serão feitos dentro da classe “SiteController.cs”. Outra tela aparece para configurar o 3po de View que desejo. Imagem 2.
Primeiro passo para o “Delete”
O primeiro passo para confirmar o “delete” é preencher o método “Ac3onResult” e depois dele gerar a View. Listagem 1.
// GET: /Site/Delete/5
</div>
<div class="display-­‐field">
@Html.DisplayFor(model => model.NOSite)
</div>
<div class="display-­‐label">
@Html.DisplayNameFor(model => model.SITSite)
</div>
<div class="display-­‐field">
@Html.DisplayFor(model => model.SITSite)
</div>
</fieldset>
Imagem 2 – Configurando a View
Note que a “View name” chamada “Delete” e a “Model class” é a do “Site” e o “template” é o “Delete”. Depois disso, cliquei no botão Add.
Isso faz com que uma página Delete.cshtml seja criada para confirmação e deleção dos dados. A página foi criada dentro da pasta Site. Listagem 2.
@using (Html.BeginForm()) {
<p>
<input type="submit" value="Delete" /> |
@Html.Ac3onLink("Back to List", "Index")
</p>
Listagem 2 – Confirmação de Delete.
}
@model MVCSAC.Models.Site
A página gerada possui os dados e um botão “submit”. Imagem 3.
@{
ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<fieldset>
<legend>Site</legend>
<div class="display-­‐label">
@Html.DisplayNameFor(model => model.NOSite)
Imagem 3 – Confirmação de Delete.
Para que o botão funcione perfeitamente, tenho que gerar outro método dentro da classe “SiteController.cs” que pode ser acessado via “hep”. O método é simples, mas existem algumas par3cularidades. Listagem 3.
Listagem 3 – Criando método para o botão.
[HepPost]
public Ac3onResult Delete(int id, Site site)
Imagem 4 – Retorna para o método principal.
{
Pronto, a parte do “delete” está pronta. No geral é bem simples, mas com par3cularidades. Fico por aqui e qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org. var sites = db.Sites.Find(id);
db.Entry(sites).State = System.Data.En3tyState.Deleted;
db.SaveChanges();
return RedirectToAc3on("Index");
}
Este método habilita o clique no botão “submit” da página de confirmação de “delete”. Quero dizer que no clique do botão, este método será acionado. Note os parâmetros de entrada, um id e a classe com get e set.
Antes do método existe o parâmetro “HepPost”, isso indica que o método é acionado ao clique de algum botão.
Dentro do método a busca é feita pelo id, depois o “status” da en3dade é mudada para “Deleted” e na outra linha eu salvo as mudanças. O retorno do método tem que chamar outro método, escolhi o “Index”.
Depois de clicar no botão, o site retorna para a página principal. Imagem 4.
MVC e Entity Framework Parte 5
Login Facilitado
using System.Collec3ons.Generic;
Olá Leitor(a), hoje eu vou escrever e mostrar como fazer o sistema de login usando MVC e En3ty Framework. Diferentemente das outras partes, vou u3lizar o SELECT normal com o banco de dados em vez de usar LINQ. Veja as ferramentas u3lizadas.
using System.ComponentModel.DataAnnota3ons;
Lembro a todos que é bom ler primeiramente as partes anteriores antes de começar a ler este; todo o projeto é uma con3nuação.
namespace MVCSAC.Models
Parte 1: hep://www.ecode10.com/ar3go/1657/MVC-­‐
e-­‐En3ty-­‐Framework-­‐Parte-­‐1 public class Account
Parte 2: hep://www.ecode10.com/ar3go/1662/MVC-­‐
e-­‐En3ty-­‐Framework-­‐Parte-­‐2 [Required]
Parte 3: hep://www.ecode10.com/ar3go/1667/MVC-­‐
e-­‐En3ty-­‐Framework-­‐Parte-­‐3 [Display(Name="Usuário")]
Parte 4: hep://www.ecode10.com/ar3go/1673/MVC-­‐
e-­‐En3ty-­‐Framework-­‐Parte-­‐4 using System.Linq;
using System.Web;
{
{
[DataType(DataType.Text)]
public string Usuario { get; set; }
[Required]
Ferramentas:
Banco de dados SQL Server
Desenvolvimento com a ferramenta Visual Studio 2012
Linguagem u3lizada: C#
Plataforma MVC 3po Web
O primeiro passo para a criação do sistema de login é criar a classe na pasta Model chamada Account.cs. Dentro da classe é necessário colocar apenas as propriedades de usuário e senha. Listagem 1.1.
Listagem 1.1 – Classe Account
using System;
[DataType(DataType.Password)]
[Display(Name="Senha")]
public string Senha { get; set; }
}
}
Note que as propriedades são obrigatórias com o comando [Required]. O 3po da propriedade Usuario é o Text e o dado é o password. Depois existe apenas o get e set em cada um.
O próximo passo é criar a classe Controller chamada AccountController.cs dentro da pasta Controller. Nela eu vou ter o formulário e as ações de usuários quando clicar no botão para logar. Funciona da mesma maneira que as outras páginas, tem o método Index e outros métodos.
O processo de criar a Controller é o mesmo informado nas partes anteriores, ou seja, nos outros ar3gos publicados. Clicar com o botão direito em cima da pasta e adicionar uma nova classe do 3po Controller. Figura 1.1
….
}
O método LogOut() faz com que a auten3cação do usuário seja terminada e a sessão abandonada. Depois disso retorna a página principal. Listagem 1.3.
Listagem 1.3 – Método LogOut()
public Ac3onResult LogOut()
{
FormsAuthen3ca3on.SignOut();
Session.Abandon();
return RedirectToAc3on("Index", "Home");
}
Figura 1.1 – Adicionando controller.
Dentro dessa Controller existem alguns métodos importantes, como: -­‐ Index(): com o obje3vo de visualizar a primeira página.
-­‐ LogOut(): re3ra a auten3cação do usuário e depois retorná-­‐lo a página home.
-­‐ LogOn(Account model, string returnUrl): consulta o usuário e o perfil
-­‐ consultaPerfil: verifica qual é o perfil do usuário
-­‐ consultaLogOn: verifica se a senha e o usuário são iguais aos gravados no banco de dados
A listagem 1.2 mostra que o contexto foi adicionado no início da classe.
Listagem 1.2 – Contexto adicionado
public class AccountController : Controller
{
private iSACContext db = new iSACContext();
Os métodos de consultar perfil e consultar logOn são do 3po privado e retornam uma lista cada um. Um retorna a lista de string e o outro uma lista de int. Aqui consultamos diretamente no banco de dados através do comando select. Listagem 1.4.
Listagem 1.4 – Consultas de perfil e logon
public Ac3onResult LogOn()
{
Session.Add("ChaveUsuario", resposta[0].ToString());
return View();
}
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
[HepPost]
public Ac3onResult LogOn(Account model, string returnUrl)
&& !returnUrl.StartsWith("//") && !
returnUrl.StartsWith("/\\"))
{
{
return Redirect(returnUrl);
var resposta = consultaLogOn(model);
}
if (resposta.Count == 0)
else
{
{
ViewBag.Mensagem = "Usuário ou senha inválida, tente novamente!";
return RedirectToAc3on("Index", "Home");
return View();
}
else
{
//consulta perfil
var perfil = consultaPerfil(resposta);
if (perfil != null)
Session.Add("PerfilUsu", perfil[0]);
FormsAuthen3ca3on.SetAuthCookie(model.Usuario, false /* createPersistentCookie */);
Session.Add("Usuario", model.Usuario);
}
}
}
O primeiro método não faz nada e mostra apenas a View da página. O segundo método já começa com comando HepPost; ele indica que os valores serão postados do formulário. Note que nem todos os métodos possuem essa linha antes do método. A primeira linha dentro do método chama outro método passando a própria model como parâmetro. Caso o retorno for igual a zero, quer dizer que as informações passadas pelo usuário não estão gravadas no banco de dados, assim, uma mensagem retorna para a tela falando que a senha ou o usuário são inválidos. Caso contrário, ou seja, se o usuário for auten3cado, é necessário verificar o perfil. Se o perfil for diferente de null então uma sessão é criada e o formulário é auten3cado pelo método SetAuthCookie. Auten3cado, a url é verificada e retornada usando o Redirect. O próximo passo é gerar a View de Login. Clique com o botão direito em cima do método LogOn e escolha a opção Add View... Figura 1.2.
O nome você deixa como está, depois marque a opção de Create e a strongly-­‐type view escolha a classe da Model chamada Account. Nos templates Scaffold, escolha o 3po Create e clique no botão Add. Dessa forma, a view é criada com todos os parâmetros e campos para verificar o usuário e senha. A mudança feita dentro da View é o nome do botão e a criação de uma variável de mensagem. A listagem 1.6 mostra como ficou a view de login.
Listagem 1.6 – View de Login
@model MVCSAC.Models.Account
@{
ViewBag.Title = "LogOn";
}
<h2>LogOn</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Account</legend>
Figura 1.2 – Adicionando a View de Login
A figura 1.3 mostra como você deve escolher as opções na próxima tela. <div class="editor-­‐label">
@Html.LabelFor(model => model.Usuario)
</div>
<div class="editor-­‐field focus">
@Html.EditorFor(model => model.Usuario)
@Html.ValidationMessageFor(model => model.Usuario)
</div>
<div class="editor-­‐label">
@Html.LabelFor(model => model.Senha)
</div>
<div class="editor-­‐field">
@Html.EditorFor(model => model.Senha)
@Html.ValidationMessageFor(model => model.Senha)
</div>
Figura 1.3 – Escolhando as opções para criar a View
<p>
<input type="submit" value="LogOn" /
>
<br />
<font color="red">@ViewBag.Mensagem</font>
</p>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
<script language="javascript">
//colocando o foco no botao
document.getElementById("@Html.IdFor(model => model.Usuario)").focus();
</script>
Figura 1.4 – Informações no banco de dados.
Dessa forma, a view é criada com todos os parâmetros e campos para verificar o usuário e senha. A mudança feita dentro da View é o nome do botão e a criação de uma variável de mensagem. A listagem 1.6 mostra como ficou a view de login.
Para melhorar um pouco a primeira tela, coloquei um link para login na primeira página. Se o perfil for de administrador, o sistema habilita algumas páginas, senão for o sistema não habilita. A figura 1.5 mostra a tela de login.
No final da view, adicionei um javascript para posicionar o cursor do mouse no primeiro campo chamado usuário. Mudei o nome do botão de sumit e coloquei uma ViewBag de mensagem. Outra dica importante, é fazer com que as classes que não podem ser acessadas sem que o usuário logue no sistema, acrescente no topo da classe a seguinte palavra: Authorize. A listagem 1.7 mostra isso.
Listagem 1.7 – Colocando autorização.
[Authorize]
public class RespostaController : Controller
{}
Para finalizar a tela todo o processo de login, acesse o arquivo de configuração Web.config, acrescente o 3po de auten3cação e a página. Listagem 1.8.
Listagem 1.8 – Arquivo de configuração.
<authen3ca3on mode="Forms">
<forms loginUrl="~/Account/LogOn" 3meout="2880" />
</authen3ca3on>
Pron3nho, basta agora executar a página e tentar logar no banco de dados. Lembro que o banco de dados está com a senha aberta, assim não estou u3lizando criptografia neste primeiro momento. É bom que u3lize sempre criptografia de dados para auten3cação de informações. Figura 1.4
Figura 1.5 – Tela de login
Para facilitar, segue todo o código da classe de AccountController.cs. Qualquer dúvida, pode entrar em contato pelo site www.mauriciojunior.org. Listagem 1.9.
Listagem 1.9 – Classe AccountController.cs
using MVCSAC.DAL;
using MVCSAC.Models;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
namespace MVCSAC.Controllers
{
public class AccountController : Controller
{
private iSACContext db = new iSACContext();
//
// GET: /Account/
public ActionResult Index()
{
return View();
}
//GET: /Account/LogOut
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
Session.Abandon();
return RedirectToAction("Index", "Home");
}
// GET: /Account/LogOn
public ActionResult LogOn()
{
return View();
}
[HttpPost]
public ActionResult LogOn(Account model, string returnUrl)
{
var resposta = consultaLogOn(model);
if (resposta.Count == 0)
{
ViewBag.Mensagem = "Usuário ou senha inválida, tente novamente!";
return View();
}
else
{
//consulta perfil
var perfil = consultaPerfil(resposta);
if (perfil != null)
Session.Add("PerfilUsu", perfil[0]);
FormsAuthentication.SetAuthCookie(model.Usuario, false /* createPersistentCookie */);
Session.Add("Usuario", model.Usuario);
Session.Add("ChaveUsuario", resposta[0].ToString());
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !
returnUrl.StartsWith("//") && !
returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
}
private List<string> consultaPerfil(List<int> resposta)
{
StringBuilder str = new StringBuilder();
str.Append(@"SELECT PerfilUsu FROM Usuarios WHERE CHUsu = @CHUsu");
IDataParameter parameter = new SqlParameter();
parameter.DbType = DbType.String;
parameter.ParameterName = "@CHUsu";
parameter.Value = resposta[0];
var perfil = db.Database.SqlQuery<String>(str.ToString(), parameter).ToList();
return perfil;
}
private List<int> consultaLogOn(Account model)
{
StringBuilder str = new StringBuilder();
str.Append(@"SELECT CHUsu FROM Usuarios WHERE EMUsu = @EMUsu AND PWUsu = @PWUsu");
IDataParameter parameter = new SqlParameter();
parameter.DbType = DbType.String;
parameter.ParameterName = "@EMUsu";
parameter.Value = model.Usuario;
IDataParameter parameter1 = new SqlParameter();
parameter1.DbType = DbType.String;
parameter1.ParameterName = "@PWUsu";
parameter1.Value = model.Senha;
var resposta = db.Database.SqlQuery<Int32>(str.ToString(), parameter, parameter1).ToList();
return resposta;
}
//
// GET: /Account/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Account/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}
Curso de Programação C#
É um curso que começa do básico mesmo.
Este curso está nos sites: hep://www.ecode10.com e hep://www.mauriciojunior.org
Este vídeo parte 6 eu falo de:
Falando dos componentes dentro do Toolbox.
U3lizando os componentes dentro da ferramenta para criar o seu sistema ou site.
Segue o link para o vídeo diretamente pelo site www.ecode10.com.
hWp://ecode10.com/video/80/curso-­‐de-­‐programacao-­‐csharp-­‐parte-­‐6
Segue os outros vídeos pelo youtube:
Parte 1-­‐ hep://www.youtube.com/watch?v=0nhyT3lNHNw
Parte 2-­‐ hep://www.youtube.com/watch?v=f6oe-­‐-­‐67zCg
Parte 3-­‐ hep://www.youtube.com/watch?v=J8ARPG6BdsU
Parte 4-­‐ hep://www.youtube.com/watch?v=TmbIeOj0Iks
Parte 5-­‐ hep://www.youtube.com/watch?v=8B8ZJ3zbCf4
Promoção mobile e-book

Documentos relacionados

Laboratório 1 - Filipo Novo Mór

Laboratório 1 - Filipo Novo Mór @Html.ActionLink(item.Name, "Browse", "Movie", new { genre =

Leia mais